2016-07-27 8 views
14

W mojej aplikacji reag/redux często chcę wysyłać wiele akcji po drugiej.Jak wysyłać wiele akcji jeden po drugim

Biorąc pod uwagę następujący przykład: Po pomyślnym zalogowaniu chcę zapisać dane użytkownika i po tym Chcę zainicjować kolejną akcję asynchroniczną, która ładuje konfigurację aplikacji z serwera.

wiem, że mogę używać redux-thunk zbudować twórcy działania jak ten

function loginRequestSuccess(data) { 
    return function(dispatch) { 
    dispatch(saveUserData(data.user)) 
    dispatch(loadConfig()) 
    } 
} 

Więc moje pytania to:

  1. gdy pierwszy dispatch powroty, to stan już zmieniony przez wszystkich reduktorów słuchasz tego działania? Zastanawiam się, czy te dwie wywołania wysyłki są wykonywane sekwencyjnie.
  2. Czy to podejście jest uważane za najlepszą praktykę w przypadku wysyłania wielu działań? Jeśli nie, co sugerowałbyś na przemian?

Dzięki za pomoc!

+0

Przyjrzałem się sadze redux, opartej na generatorze/zysku, który może pasować do tego, co chcesz. Może to być trudne na pierwszy rzut oka, ale jeśli chcesz przejąć kontrolę nad tym, co będzie sekwencyjne lub równoległe, spróbuj tego http://yelouafi.github.io/redux-saga/docs/advanced/SequencingSagas.html –

+0

Podczas wysyłki sekwencyjny i synchroniczny, ReactJS będzie aktualizował zbiorczo i uruchamiał jego aktualizację (rendering, itp.) asynchronicznie, więc możesz otrzymać tylko jeden render. Zobacz https://github.com/reactjs/react-redux/issues/291 –

Odpowiedz

9

Tak, redux-thunk pozwala robić to, co mówisz, i tak, jest to najlepsza praktyka przy wysyłaniu wielu akcji (takich, które wolę od alternatyw ze względu na jego prostotę). Stan jest rzeczywiście aktualizowany, gdy tylko zostanie wysłany (do czasu, gdy się zwróci), dlatego otrzymujesz funkcję odzyskiwania stanu w thunk, zamiast po prostu odniesienia do stanu. W ten sposób można zmienić stan za pomocą jednej wysyłki, a następnie wywołać funkcję getState(), aby uzyskać odniesienie do nowego stanu, z którego można odczytać, jeśli zajdzie taka potrzeba.

+0

czy mógłbyś udostępnić implementację lub link do dowolnego odpowiedniego artykułu dla tego samego. –

+0

Wygląda na to, że istnieje kilka przykładów: https://gist.github.com/markerikson/ea4d0a6ce56ee479fe8b356e099f857e. W przypadku artykułu wygląda to tak, jakby ktoś napisał coś na ten temat tutaj: https://codepen.io/stowball/post/a -Dummy-s-guide-to-redux-and-thunk-in-react – John

2

redux-thunk jest dokładnie tym, czego szukasz. Uważam to za bardzo dobrą praktykę.

Aby odpowiedzieć na twoje pytanie, rzeczywiście, kiedy pierwsza wysyłka zwraca stan jest już zmieniony przez zwane reduktory.

+0

Tak, redux-thunk jest dobry do wysyłania wielu akcji, ale nie gwarantuje, że wszystko jest sekwencyjne, prawda? –

+3

W ramach tego samego programu rozsyłającego wszystkie akcje są sekwencyjne. W przypadku opisanym powyżej "saveUserData" jest zawsze przed 'loadConfig' – mguijarr