我可能做了一些愚蠢的事情,但我无法让defaultProps工作。
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.value
和this.props.field.errors.length
而我的所有测试都被TypeError: 'undefined' is not an object (evaluating 'this.props.field.errors.length')
炸毁,我的默认道具不应该给它一个默认值吗?最初,我的field
道具是一个空对象。
答案 0 :(得分:17)
最初,我的
field
道具是一个空对象。
默认道具仅在没有为道具传递值时使用。它是浅层合并,而不是深度合并。
来自docs(强调我的):
getDefaultProps()
的结果将被缓存并用于确保this.props.value
如果未由父组件指定,则值。
答案 1 :(得分:2)
您不能将isRequire与defaultProps混合使用。如果将isRequired字段提供给defaultProps,则将忽略它。
这应该有效:
static propTypes = {
name: React.PropTypes.string.isRequired,
field: React.PropTypes.object
};
static defaultProps = {
field: { value: '', errors: [] }
};