配列ではなくオブジェクトで機能する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で、spread構文を使用してオブジェクトをディープコピーする方法はありますか?
combineReducers
して2つ(またはそれ以上)を一緒に構成する必要があります。慣用的なreduxテクニックを使用すると、オブジェクトのディープクローニングの問題がなくなります。