Ich baue eine relativ große Web-App mit react + redux und der Umgang mit meinem Laden wird wirklich verwirrend.Redux - Tief verschachtelte Store-Requisiten mit dem Spread-Operator aktualisieren
kam ich mit einem Problem auf bei der Aktualisierung der verschachtelten Objekte im Speicher und gefunden Immutable Update Patterns Abschnitt redux docs, die ich so etwas wie dies tun soll, zeigen an:
function updateVeryNestedField(state, action) {
return {
....state,
first : {
...state.first,
second : {
...state.first.second,
[action.someId] : {
...state.first.second[action.someId],
fourth : action.someValue
}
}
}
}
}
Und ich habe so getan, und als Ergebnis einige Teile meiner Reduzierungen suchen wie folgt aus:
.
.
.
case "CHANGE_RANGED_INPUT": {
return {
...state,
searchPanel: {
...state.searchPanel,
[action.payload.category]: {
...state.searchPanel[action.payload.category],
rangedInputs: {
...state.searchPanel[action.payload.category].rangedInputs,
[action.payload.type]: {
...state.searchPanel[action.payload.category].rangedInputs[action.payload.type],
[action.payload.key]: {
...state.searchPanel[action.payload.category].rangedInputs[action.payload.type][action.payload.key],
value: action.payload.value
}
}
},
}
},
}
}
.
.
.
ich denke, Sie stimmen zu, dass mein Code wird immer mehr verwirrend als es sein sollte. Meine Frage ist nicht die Leistung der von redux docs empfohlenen Art (obwohl es sich anfühlt wie eine Menge Arbeit für eine Aktion, die in meinem Fall fast jede Sekunde verschickt wird) und ich nehme an, es ist der beste Weg.
Meine Frage betrifft die Lesbarkeit meines Codes. Gibt es einen Ansatz, der meinen Reduzierer sauberer machen kann?
Eigentlich verwende ich react-redux-form für einige meiner riesigen Formen, nicht, weil ich alle Funktionen dieser Bibliothek, sondern nur eine Funktion benötigt. Mit dieser Bibliothek kann ich ein riesiges Formularmodell mit vielen verschachtelten Daten erstellen. Ich muss lediglich die Modellroute zur Eingabe hinzufügen, damit die vordefinierten onChange-Ereignisse funktionieren und die zugehörigen Werte aktualisiert werden.
Ist diese Bibliothek so mit Spread-Operator unter seiner Haube?
Gibt es eine andere Möglichkeit, einen Index zu einigen Eingaben hinzuzufügen und den zugehörigen Wert im Speicher mit diesem Index zu aktualisieren, wenn der Eingabewert geändert wird?
Es klingt wie die Form Ihrer Daten ist einfach zu verschachtelt, um bequem zu manipulieren. Lesen Sie in den redux docs "Normalizing state shape" und sehen Sie, ob Sie Ihren Zustand in eine bequemere Form bringen können. http://redux.js.org/docs/recipes/reducers/NormalizingStateShape.html –
Wie @ DavidL.Walsh sagte, möchten Sie möglicherweise in Betracht ziehen, Ihre Zustandsform zu normalisieren. Außerdem soll [ImmutableJS] (http://redux.js.org/docs/recipes/reducers/NormalizingStateShape.html) helfen, mit verschachtelten Strukturen wie diesem umzugehen, obwohl ich es selbst nicht benutzt habe. Ich denke immer noch, dass du zuerst deinen Zustand normalisieren solltest, bevor du diese Bibliothek ausprobierst. – DonovanM
Danke für Ihre Kommentare. Ich werde sicherlich meine Ladenform überdenken. Ich habe auch diese Zeilen bemerkt: "Offensichtlich macht jede Verschachtelungsebene das Lesen schwieriger und gibt mehr Chancen, Fehler zu machen. Dies ist einer von mehreren Gründen, warum Sie ermutigt werden, Ihren Staat flach zu halten und Reduktoren so viel wie möglich zu komponieren . " Ich denke, ich muss einige meiner Reduzierungen in mehrere Reduzierungen aufteilen. – Taxellool