React.Component.defaultProps对象被覆盖,没有合并?

4m1*_*m1r 10 ecmascript-6 reactjs

我正在尝试使用对象文字设置defaultProp,但过了一段时间后我意识到React类构造函数没有将默认道具与应用的道具合并,所以我最终得到了defaultProps文字中任何属性的未定义值没有被包括在应用道具中.有没有办法合并默认道具和应用道具,还是我需要将我的对象分解成几个道具?

class Test extends React.Component {
  constructor(props) {
    super(props);

    //props.test is only {one: false}
    //props.test.two is undefined

  }
  render() {
    return (<div>render</div>)
  }
}

Test.defaultProps = {
  test:  {
    one: true,
    two: true
  }
}


ReactDOM.render(<Test test={{'one': false}}/>, document.getElementById('#test'));
Run Code Online (Sandbox Code Playgroud)

http://codepen.io/adjavaherian/pen/oYNPLz

Tim*_*imo 8

React只对默认道具和实际道具进行浅层合并,即嵌套的默认道具被覆盖而不是合并.这是设计的.

有关更多背景和推理的原因,请参阅此React问题.为什么会出现这种情况并提供可能的解决方法:

除了这里的潜在性能问题.这个问题的一个问题是你如何处理像数组这样的嵌套复杂结构?级联?联盟?一组对象怎么样?深度对象合并可能导致意外行为,这就是为什么通常实现允许您指定合并策略,例如_.合并.我不知道你怎么会在道具类型声明中这样做.