我正在尝试使用对象文字设置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'));
React只对默认道具和实际道具进行浅层合并,即嵌套的默认道具被覆盖而不是合并.这是设计的.
有关更多背景和推理,请参阅this React issue,为什么会出现这种情况和可能的解决方法:
aside from the potential perf issues here. one issue with this is how do you handle nested complex structures like arrays? concatenation? Union? what about an array of objects? deep object merging can lead to unexpected behaviour,which is why often implementations allow you to specify a merge strategy such as _. merge. I’m not sure how you would do that in prop type declaration.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。