【发布时间】:2017-07-26 05:14:32
【问题描述】:
父组件是一个header
子组件是一个 form,用于在保存后触发 redux 操作来更改标题中出现的值。
我用
设置子状态constructor(props) {
super(props);
this.state = {
object: { ...props.object },
hidden: props.hidden,
};
}
表单用于渲染state.object和修改state.object。 当我修改 state.object 时,来自父组件的道具也会发生变化。
handleObjectChange = (event, key, subkey) => {
console.log('props', this.props.object.params);
console.log('state', this.state.object.params);
event.preventDefault();
const value = this.handlePeriod(event.target.value);
this.setState((prevState) => {
const object = { ...prevState.object };
object[key][subkey] = value;
return { object };
});
}
控制台输出:
newvalueijusttyped
newvalueijusttyped
这种行为实际上一直延伸到修改 redux 存储而无需分派操作。
不胜感激这个问题的解决方案
更新:
将构造函数更改为此解决了问题
constructor(props) {
super(props);
this.state = {
object: JSON.parse(JSON.stringify(props.object)),
hidden: props.hidden,
};
}
为什么对象扩展运算符没有实现我想要完成的目标?
【问题讨论】:
-
展开运算符只克隆第一层。所以对象内部的对象仍然是通过引用传递的。使用ImmutableJS 以获得更好的性能
标签: javascript reactjs redux immutability