React defaultProps无效

时间:2015-10-21 14:58:43

标签: 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: '', 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道具是一个空对象。

2 个答案:

答案 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: [] }
};