Ich habe eine Aktion, die ausgelöst wird, wenn ein Benutzer anhängig einzuloggen versucht und wird die Anfrage noch:Wie ungültigen Zustand in redux Minderer behandeln
function signinRequestReducer(state, action) {
if (action.type === "SIGNIN_REQUEST") {
state = {signingIn: true};
}
return state;
}
Doch was passiert, wenn diese zweimal ausgelöst wird (aufgrund eines Fehler an anderer Stelle im Code). Sollte der Reduzierer die zweite Aktion ignorieren (und eine reine Funktion bleiben), sollte er einen Fehler (und nicht mehr eine reine Funktion) oder etwas anderes werfen?
function signinRequestReducer(state, action) {
if (action.type === "SIGNIN_REQUEST") {
if (state.signingIn) {
// Option 1
return state;
// Option 2
raise new Error("Can not sign in whilst pending previous attempt.");
// Option 3 ... ?
}
state = {signingIn: true};
}
return state;
}
** bearbeiten **
Zur Zeit ich einen Fehler bin anmelden.
if (action.type === "SIGNIN_REQUEST") {
if (state.signingIn) {
console.error("Can not sign in whilst pending previous attempt.");
// return state; // only return early if it's really not possible to set the new state.
}
...
Das ist nicht eine reine Funktion, aber es erlaubt es:
- der Fehler in der Entwicklung und Produktion zu beobachten.
- sollten die ungültigen Status/abgesendeten Aktionen weiterhin zulassen, dass die App funktioniert, kann sie dies weiterhin tun.
** bearbeiten 2 **
Dan Abramov suggested einen Fehler zu werfen.
"Ich möchte lieber verhindern, dass die Aktionen überhaupt ausgeführt werden", stimme ich zu. Aber wenn du defensiv programmierst, was machst du? Sie schreiben einen Reducer, der weiß, dass der Status ungültig wird, wenn er zweimal aufgerufen wird. Wenn er aufgerufen wird, prüft er den aktuellen Status und findet ihn ungültig. Was tun Sie? "Im Allgemeinen sind es asynchrone Aktionen, wie eine API-Anfrage, die wir vor dieser Art von Verhalten schützen wollen" - es sind alle Aktionen, aber da die meisten von asynchronen Ereignissen (API, Benutzer, Timing usw.) sind, nehme ich an es ist. – AJP
Danke für die Beispiele von Redux-Thunk. Aber wieder ist es nicht das, was ich frage. "Wie man ungültigen Staat in redux Reduzierer behandelt". Ich weiß es zu schätzen, dass der Code außerhalb der Reduktoren dort zu finden ist, wo er behandelt werden sollte. Ist dies nicht der Fall, handelt es sich um einen Fehler. Aber ich frage mich, was ist Best Practice ** innerhalb einer Reducer-Funktion **. Wie auch immer, die "Lösung" in der Bearbeitung der Frage: Aufruf von 'console.error()' und Erlauben, dass Er Reducer vorzeitig fortfährt/abbricht, wenn es definitiv keinen Sinn macht, den Zustand zu ändern, funktioniert im Moment gut. Danke für deine Antwort. – AJP