Ich habe folgende Struktur. Ich habe ein Company
Objekt, das viele Person
Objekte in einem Array enthält.Aktualisieren der Deep-Eigenschaft eines Objekts mit Redux-Reduzierungen
companies: CompanyInterface = {
persons: PersonInterface[] = []
}
Ich versuche, die Personen, die zu dieser Firma gehören, in einer Tabelle zu zeigen. Wenn ich jedoch Personen zum Array personen hinzufüge/lösche, sollte es automatisch aktualisiert werden.
Im Moment sieht mein Minderer wie folgt aus:
// Initial state
companies: CompanyInterface[];
// Reducer
case Constants.GLOBAL_COMPANY_ADD_PERSON:
[action.payload.person].concat(state.companies.filter(company => company.id === action.payload.id)[0].persons));
return {
...state
};
Obwohl ich Concat richtig überprüfen können funktioniert (ich kann [Person]
sehen, wenn ich es log CONSOLLE) es etwas nicht aktualisiert auf dem Speicher.
Also, was ist der beste Weg, um ein Array in Redux zu aktualisieren, die eine Eigenschaft im übergeordneten Objekt ist?
Vielen Dank.
Und wenn ich es mutiere, beschwert sich React über das Mutieren der Daten in Reducers. Kannst du ein wenig weiterarbeiten? Woher bekommst du newElement? Es ist kein Firmenobjekt. action.payload ist ein Objekt, das in die Eigenschaft des Unternehmens verschoben werden soll. – Aris
Das Beispiel soll veranschaulichen, wie das Muster aussehen sollte, siehe http://redux.js.org/docs/introduction/CoreConcepts.html Ihr Codeabschnitt tut offensichtlich nichts. Sie verknüpfen die neue Person einfach mit der vorherigen, ohne den Rückgabewert in einer Variablen zu speichern und dann den vorherigen Zustand zurückzugeben. Wie Sie @momentator erklärt haben, müssen Sie diesen Wert in einer Variablen speichern und dann einen neuen Status mit "Unternehmen" aktualisieren. – gcedo
Ich habe auch Momenators Beispiel versucht. Ich erhalte JS-Fehler, die sagen: "Es wurde eine Mutation in Reducer entdeckt, die verboten ist." Ich bin eigentlich ein bisschen verwirrt. – Aris