Ich versuche, eine Deep Copy Map-Methode für mein Redux-Projekt zu erstellen, die eher mit Objekten als mit Arrays funktioniert. Ich habe gelesen, dass in Redux jeder Zustand nichts an den vorherigen Zuständen ändern sollte.
export const mapCopy = (object, callback) => {
return Object.keys(object).reduce(function (output, key) {
output[key] = callback.call(this, {...object[key]});
return output;
}, {});
}
Es klappt:
return mapCopy(state, e => {
if (e.id === action.id) {
e.title = 'new item';
}
return e;
})
Da innere Elemente jedoch nicht tief kopiert werden, muss ich Folgendes anpassen:
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;
}, {});
}
Dies ist weniger elegant, da bekannt sein muss, welche Objekte übergeben werden. Gibt es in ES6 eine Möglichkeit, die Spread-Syntax zum tiefen Kopieren eines Objekts zu verwenden?
combineReducers
die beiden (oder mehr) zusammensetzen. Wenn Sie idiomatische Redux-Techniken verwenden, verschwindet Ihr Problem des tiefen Klonens von Objekten.