Ich lerne, wie Redox funktioniert, aber es ist eine Menge Code, um einfache Dinge zu tun. Ich möchte zum Beispiel einige Daten vom Server laden, bevor sie angezeigt werden. Aus Gründen der Bearbeitung kann ich nicht einfach nur eingehende Requisiten verwenden, sondern Requisiten-Daten in den lokalen Zustand kopieren.Rückrufe mit Redux-Thunk/Redux-Observable mit Redux
Soweit ich gelernt habe, muss ich eine Fetch_request Aktion senden. Bei Erfolg wird eine Aktion fetch_success den Store mit einem neuen Element aktualisieren. Das aktualisierte Element bewirkt, dass die Renderfunktion meiner Komponente aktualisiert wird.
In Komponente
componentWillMount() {
this.props.FETCH_REQUEST(this.props.match.params.id);
}
...
In Aktionen
export function FETCH_REQUEST(id) {
api.get(...)
.then(d => FETCH_SUCCESS(d))
.catch(e => FETCH_FAILURE(e));
}
...
In Minderer
export function FETCH_REDUCER(state = {}, action ={}) {
switch (action.type) {
case 'FETCH_SUCCESS':
return { ...state, [action.payload.id]: ...action.payload }
...
}
Zurück in der Komponente
this.props.FETCH_REDUCER
// extra code for state, getting desired item from...
Kann ich stattdessen eine react-thunk-Funktion aufrufen und einige Callback-Funktionen übergeben? Das Thunk-Protokoll kann den Speicher aktualisieren, und Rückrufe können den lokalen Status der Komponente ändern.
In Komponente
componentWillMount() {
this.props.FETCH_REQUEST(this.props.match.params.id, this.cbSuccess, this.cbFailure);
}
cbSuccess(data) {
// do something
}
cbFailure(error) {
// do something
}
...
In Aktion
export function FETCH_REQUEST(id, cbSuccess, cbFailure) {
api.get(...)
.then(d => {
cbSuccess(d);
FETCH_SUCCESS(d);
}).catch(e => {
cbFailure(d);
FETCH_FAILURE(e);
});
}
...
Ist das falsche? Kann ich dasselbe mit Redux-Observable tun?
UPDATE 1
zog ich fast alles auf die redux speichern, auch für Bearbeitungen (dh this.setState
mit this.props.setState
ersetzt). Es erleichtert das staatliche Management. Jedes Mal, wenn ein onChange-Befehl ausgelöst wird, wird jedoch ein neuer Status angezeigt. Kann jemand bestätigen, ob das in Ordnung ist? Ich mache mir Sorgen um die Speicherverwaltung der App, weil ich redigiere, um jeden Status zu referenzieren.
Wenn ich die Daten bearbeiten wollte, die ich von FETCH_REDUCER erhalten habe, würde meine Eingabe onChange nicht eine Aktion für jede Zeichenänderung senden müssen? Wäre das wegen des Klonens nicht speicherverschwendend? Meine Idee war, die Daten von FETCH_REDUCER in den lokalen Zustand zu kopieren, lokal Änderungen vorzunehmen und dann eine Aktion zum Aktualisieren des Geschäfts zu senden. – SILENT
Ich stimme deinem Standpunkt zu. Und die akzeptierte Arbeit besteht darin, eine Funktion wie _.debounce zu verwenden, um den Aufruf von api von Ihrer onChange-Funktion zu drosseln. Etwas in der Art von @ juliens Antwort in https://stackoverflow.com/questions/23123138/perform-debounce-in-react-js – palsrealm