Javascript 道具不起作用
我可能在做一些愚蠢的事情,但我无法让defaultProps工作Javascript 道具不起作用,javascript,reactjs,Javascript,Reactjs,我可能在做一些愚蠢的事情,但我无法让defaultProps工作 export default class MyClass extends Component{ static propTypes = { name: React.PropTypes.string.isRequired, field: React.PropTypes.object.isRequired } static defaultProps = { field: { value: '', e
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
并且我的所有测试都被类型错误炸掉了:'undefined'不是对象(计算'this.props.field.errors.length')
,我的默认props不应该给它一个默认值吗?最初,我的字段
道具是一个空对象
最初,我的字段
道具是一个空对象
默认道具仅在没有为道具传递值时使用。这是浅合并,不是深合并
从(我的)重点:
getDefaultProps()
的结果将被缓存,并用于确保此.props.value
将具有一个值,如果它不是由父组件指定的话
您不能将isRequire与defaultProps混合使用。如果您将isRequired设置为字段,则将忽略defaultProps 这应该起作用:
static propTypes = {
name: React.PropTypes.string.isRequired,
field: React.PropTypes.object
};
static defaultProps = {
field: { value: '', errors: [] }
};
应该更仔细地使用RTFM,将不得不重新考虑我的方法。这是关键点“默认道具仅在没有为道具传递值的情况下使用。这是浅合并,而不是深度合并。”链接引用似乎已经过时。请参阅本页。那不是真的。两者都可以combined@davesnx如果您设置isRequired意味着您将始终提供该道具!因此,您不需要默认值:)实际上,propTypes验证在defaultProps之后运行<如果您没有默认道具或未传递道具,则code>isRequired将记录错误。检查此示例: