Ich verwende Redox mit reagieren und Typoskript für meine Anwendung. Ich arbeite mit vielen Artikeln, die an verschiedenen Orten meiner App verwendet werden. Mein Zustand sieht wie folgt aus:Entwerfen eines effizienten Reduzierers für einen großen Zustand mit Redux
{
items: {42: {}, 53: {}, ... }, //A large dictionary of items
itemPage1: {
items: [42, 34, 67, ...],
...
},
itemPage2: { ...
},
...
}
Ich möchte ein effizientes Element Minderer schreiben, aber die Einzelteile sind groß und ich kann jedes Mal nicht schaffen tiefe Kopien. Offenbar muss ich nicht nach gaearon (extrahiert von there): Redux fordert Sie nicht auf, den Zustand bei jeder Aktion tief zu klonen. Sie werden nur aufgefordert, neue Objekte für die geänderten Teile zurückzugeben. Sie können den vorherigen Status für alle Teile der Struktur, die nicht geändert wurden, wiederverwenden..
Das ist großartig! Allerdings bin ich neu in all dem und ich bin mir nicht sicher, wie man den Reducer richtig einsetzt. Was ich bisher in meinem Artikel Minderer habe, ist dies:
case UPDATE_ITEM_LABEL:
return (<any>Object).assign({}, state, {
item_id: (<any>Object).assign({}, state[action.item_id], {
label: action.value
})
})
So kopiert er alle das Element des alten Zustandes in ein neues Objekt, und dann mit einem geändertenen Objekt mit dem neuen aktualisierten Wert das Ergebnis fusionieren. Meine Hoffnung ist, dass die Artikel während der ersten assign
als Referenz weitergegeben werden und daher nicht tief kopiert werden? Wenn dies der Fall ist, wäre das in Ordnung, da ich es mir leisten kann, einen Gegenstand und einige einfache Referenzen für jede Aktion tief zu kopieren. Auch ich fand, dass es möglich war, immutable.js zu verwenden, um dieses Problem zu lösen, wenn die Methode, die ich vorschlage, funktioniert, warum würden Leute immutable.js benutzen?
Unveränderlich versucht, vorhandene Daten effizient zu verwenden. Der Zweck ist, solche Entscheidungen nicht selbst treffen zu müssen. –