Javascript 道具不起作用

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

我可能在做一些愚蠢的事情,但我无法让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
并且我的所有测试都被
类型错误炸掉了:'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将记录错误。检查此示例: