2015-10-21 30 views
5

私はおそらく何か愚かなことをしていますが、私は動作するようにdefaultPropsを得ることができません。React defaultProps not working

export default class MyClass extends Component{ 
    static propTypes = { 
    name: React.PropTypes.string.isRequired, 
    field: React.PropTypes.object.isRequired 
    } 

    static defaultProps = { 
    field: { value: '', errors: [] } 
    } 

    render() { 
    // blah blah 
    } 
} 

私はthis.props.field.valuethis.props.field.errors.lengthに依存し、すべての私のテストはTypeError: 'undefined' is not an object (evaluating 'this.props.field.errors.length')で爆破されたコードを持っているが、私のデフォルトの小道具はそれをデフォルト値を与えるべきではないのですか?当初、私のfield小道具は空のオブジェクトです。

答えて

9

最初に私のfield小道具は空のオブジェクトです。

デフォルトの小道具は、小道具に値が渡されない場合にのみ使用されます。それは浅いマージであり、深いマージではありません。 docs(強調鉱山)から

getDefaultProps()の結果はキャッシュされ、それが親コンポーネントによって指定されていない場合this.props.value値を有するであろうことを保証するために使用されるであろう。

+0

RTFMをもう少し慎重にする必要がありますが、私のアプローチを再考する必要があります。 – Lee

+1

これは重要なポイントです。「デフォルトの小道具は小道具に値が渡されない場合にのみ使用され、浅いマージであり深いマージではありません」 – Wayou

+0

リンクの参照が古くなっているようです。代わりにこのページを参照してください。 https://reactjs.org/docs/react-without-es6.html#declaring-default-props –