我正在尝试为我的Redux项目创建一个深层复制映射方法,该方法将处理对象而不是数组。我了解到,在Redux中,每个状态都不应更改以前的状态。
export const mapCopy = (object, callback) => {
return Object.keys(object).reduce(function (output, key) {
output[key] = callback.call(this, {...object[key]});
return output;
}, {});
}
有用:
return mapCopy(state, e => {
if (e.id === action.id) {
e.title = 'new item';
}
return e;
})
但是,它不会深度复制内部项目,因此我需要将其调整为:
export const mapCopy = (object, callback) => {
return Object.keys(object).reduce(function (output, key) {
let newObject = {...object[key]};
newObject.style = {...newObject.style};
newObject.data = {...newObject.data};
output[key] = callback.call(this, newObject);
return output;
}, {});
}
这不太优雅,因为它需要知道传递了哪些对象。ES6中是否有一种方法可以使用传播语法来深度复制对象?
combineReducers
其组合在一起(或多个)。如果您使用惯用的还原技术,则深度克隆对象的问题将消失。