Ich habe ein Problem gefunden, bei dem ein Redux-Speicher korrekt aktualisiert wird, aber die Komponente spiegelt die Änderung nicht wider. Ich habe mehrere Möglichkeiten ausprobiert, um sicherzustellen, dass ich den Staat nicht mutiere, aber das Problem bleibt bestehen. Meine Reduzierungen nehmen gewöhnlich die Form:Gewährleistet JSON.parse (JSON.stringify (state)) keine Mutation des Redux-Status?
case 'ADD_OBJECT_TO_OBJECT_OF_OBJECTS': {
newState = copyState(state);
newState.objectOfObjects[action.id] = action.obj;
return newState;
}
Für meine copyState Funktion, ich in der Regel Object.assign verschachtelt verwenden() ruft, aber Fehler zu vermeiden, ist nicht so einfach. Für die Prüfung, um sicherzustellen, dass ich Zustand nicht mutiert, ist es richtig,
const copyState = (state) => {
return JSON.parse(JSON.stringify(state));
};
als garantierter Methode nicht mutiert (Redux) Zustand zu verwenden, unabhängig davon, wie teuer der Prozess?
Wenn nicht, gibt es andere tiefe Kopiermethoden, auf die ich mich verlassen kann, um sicherzustellen, dass ich nicht mutieren bin?
EDIT: Angesichts der Tatsache, dass andere Menschen das gleiche Problem haben, werde ich die Lösung auf das Problem, das ich hatte.
Ich habe versucht, eine Aktion zu versenden, und dann in der Zeile nach, ich habe versucht, auf Daten aus dem Geschäft zuzugreifen, die in der vorherigen Zeile aktualisiert wurde.
dispatchAction(data) // let's say this updates a part of the redux state called 'collection'
console.log(this.props.collection) // This will not be updated!
Siehe https://github.com/reactjs/redux/issues/1543
'state' unberührt wird in' copyState' –
es möglich wäre (aber unglaublich dumm) 'zu geben state' eine' .toJSON' Methode, die es mutiert. – Bergi