2016-11-28 22 views
9

Mam funkcji asynchronicznej w moich działaniach Redux i zwraca obiekt jak to w moim reduktora:Najlepsze praktyki do obsługi błędów w Redux i React

{ 
user: {}, 
fetching: false, 
fetched, false, 
error: null 
} 

Więc w zasadzie, kiedy rozpocząć wywołanie funkcji asynchroniczny Update stan Redux do fetching: true i jeśli wynik jest z powodzeniem spełniony wówczas fetched:true i fetching:false
więc odwzorować stan redux do podpór za pomocą połączyć w reagują-Redux i dodałem to w mojej funkcji renderowania komponentu:

if(this.props.fetched) { 
    // Go to next page 
} 

Powoduje automatyczne przejście do następnej strony po pobraniu danych.
Mam jednak problem z obsługą błędów. Gdy błąd zmienia się z wartości null na error, to w jaki sposób obsłużyć obsługę błędów w moim komponencie reagującym. Co mam teraz jest:

if(this.props.error != null) { 
    // popup error 
} 

Ale teraz kończy się w sytuacji, że następnym razem, kiedy zadzwonić do mojego działania, które już zostały this.props.error przypisany do błędu i jego not null, co powoduje, że wyświetlając popup, nawet jeśli nie ma błędu.
Czy muszę resetować mój błąd za każdym razem, gdy jest wyświetlany lub czy istnieje jakaś lepsza praktyka wykonywania tej całej czynności?

Odpowiedz

7

Można użyć oprogramowania pośredniego redux-catch do przechwytywania błędów Redux reduktorów i middleware.

Można użyć czegoś podobnego,

import reduxCatch from 'redux-catch'; 

function errorHandler(error, getState, lastAction, dispatch) { 
    //dispatch ERROR action as you need. 
} 

const store = createStore(reducer, applyMiddleware(
    reduxCatch(errorHandler) 
)); 

I wyświetlanie wyskakujących błędów, gdy pojawi się błąd, którego działanie jest wyzwalany od redux-catch middleware. Po zamknięciu wyskakującego okna wywołaj akcję, która resetuje błąd do wartości null, aby wyskakujące okienko nie było wyświetlane, jeśli nie ma błędów do wyświetlenia.

+0

Wydaje się to przydatne w przypadku, gdy chcę zgłaszać awarie. Moim zamiarem jest wyświetlenie modalu na podstawie błędu. Tak jak powiedzmy, logowanie nie powiodło się. – abeikverdi

+0

@abeikverdi Tak, możesz wysłać akcję z ładunkiem jako błąd! Jak, jest tam! – ArchNoob

+0

Rozumiem. Czy mogę utworzyć widok zgodnie z moim ładunkiem i wyświetlić go użytkownikowi? – abeikverdi

1

Miałem podobny problem, gdy miałem modal nadal wyświetlać stare błędy po zamknięciu modalu. Rozwiązałem go, wysyłając akcję "resetErrors" po tym, jak otrzymałem sukces za pośrednictwem mojego wywołania zwrotnego.

Nie natknąłem się na lepsze rozwiązanie inne niż "resetowanie" go za każdym razem.

+0

Tak, to też myślałem. Ale teraz muszę wykonać tak wiele akcji resetowania dla różnych reduktorów i dodać je do mojego widoku tylko w tym celu. Więc pomyślałem, że może jest lepszy sposób na zrobienie tego wszystkiego. – abeikverdi

+1

Jedna akcja może zmienić dowolną liczbę pól. Akcja ustawiająca "pobieranie" lub "pobrana" może również zresetować błąd. To powiedziawszy, może najlepiej jest zresetować, gdy modal jest zamknięty. Zauważ, że w React-Redux modalny jest zwykle widoczny wtedy i tylko wtedy, gdy stan mówi, że tak powinno być. Wyzwalacz może być błędem w stanie. Oznacza to, że resetowanie błędu jest tym samym, co zamknięcie modalu. Również przełącznik następnej strony powinien być częścią akcji ze stroną w Redux. – DDS