Wyobraź sobie sytuację obsługi formularza, który może zwracać różne błędy: 400, 401, 500. Po zwróceniu 400, chcę wyświetlić komunikat na górze formularza (zastąp domyślne zachowanie). W przypadku innych (nieobsługiwanych) kodów błędów należy uruchomić domyślną (globalną) procedurę obsługi błędów (która wyświetla powiadomienie toast). Po prostu nie chcą powielać ten kod dla każdego działaniaJak utworzyć globalną procedurę obsługi błędów w Redux i przesłonić ją w razie potrzeby?
I wysyłką async akcje używając Redux-Thunk middleware
// Pseudo code
const action = (dispatch) => {
const onSuccess = (result) => dispatch({type: 'OPERATION_SUCCESS', payload: result});
const onError = (error) => dispatch({type: 'OPERATION_ERROR', error: true, payload: error});
return promise.then(onSuccess, onError);
};
dispatch(action);
mogę utworzyć reduktor, który obsługuje wszystkie {Błąd: true} działań i pokaż niektóre wyskakujące powiadomienia (prawdopodobnie bez użycia stanu redux, bezpośrednio wywołując metodę toast.show()). Ale jak ustalić, czy ten specjalny błąd był już obsługiwany przez jakiś inny reduktor?
Popraw mnie jeśli się mylę @DanAbramov, ale w funkcji redukującej "błąd", czy nie musi najpierw sprawdzać 'RESET_ERROR'? Po prostu próbowałem tego i kiedy próbujesz zresetować komunikat o błędzie nic się nie dzieje. Myślę, że dzieje się tak dlatego, że pierwszy warunek "if" jest prawdziwy, ponieważ 'action.error' jest oczywiście niezdefiniowany podczas resetowania komunikatu o błędzie. – Jonathan