Javascript 为什么克隆JS对象超过1级深度会破坏Redux中的不变性?
以下面一个简单的深嵌套JS对象为例:Javascript 为什么克隆JS对象超过1级深度会破坏Redux中的不变性?,javascript,reactjs,ecmascript-6,redux,Javascript,Reactjs,Ecmascript 6,Redux,以下面一个简单的深嵌套JS对象为例: customer: { email: '', address: { addressLines: [''], postcode: '', city: '' } } 以下更新不会触发ReduxImmutableState不变量中的状态突变: let objectToUpdate = { address: { addressLines: customer.address.add
customer: {
email: '',
address: {
addressLines: [''],
postcode: '',
city: ''
}
}
以下更新不会触发ReduxImmutableState不变量中的状态突变:
let objectToUpdate = {
address: {
addressLines: customer.address.addressLines,
postcode: value,
city: customer.address.city
}
};
customer = Object.assign({}, customer, objectToUpdate);
其中,由于此更新会触发状态突变错误:
customer.address['postcode'] = value;
而一个层次的深度不会:
customer['email'] = value;
当需要对超过1级的状态执行更新时,唯一的方法是使用或滚动您自己的
谢谢。Object.assign不会制作深度副本。有几个替代方案你可以考虑,例如提到。还有
这里有一篇好文章:Object.assign不会进行深度复制。有几个替代方案你可以考虑,例如提到。还有
这里有一篇好文章:因为Object.assign仅对当前对象工作而不是其嵌套对象因为Object.assign仅对当前对象工作而不是其嵌套对象