私はReduxのは比較的新しいんだ、と私は次のような状況があります。Redux:どのように2つのレデューサーを特定の順序で同じアクションに対応させることができますか?
- マイアプリは応答が戻ってくると
{type: 'RECEIVE_FIRST_MESSAGE', message}
をディスパッチサーバーから - の最初の「メッセージ」オブジェクトをフェッチするためにAJAX要求を行うと
マイ
MessageReducer
ハンドルによってRECEIVE_FIRST_MESSAGE
:A)
へstate.messages
action.message
を追加します私は2番目のフェッチ:B)次のメッセージを取得するために別のAJAX呼び出しを行う(
action.message.hasNextMessage
場合)私
SessionReducer
も一つだけ問題がありますaction.message.sessionId
state.session.id
にを追加することにより、
RECEIVE_FIRST_MESSAGE
を扱いますメッセージ、私は最初のメッセージから得た
sessionId
を使用する必要があります。しかし
MessageReducer
が
SessionReducer
より前に実行されているため、セッションIDは、
MessageReducer
が2番目のAJAX要求を作成しようとした時点の状態にありません。
タイムアウトを使用してMessageReducer
が1ms後に2回目のリクエストを作成しないようにすることで解決できましたが、ハック/アンチパターンのように感じます。
TLDR
私が持っている:
state
の2つの部分のためのデータ(二つの異なる減速によって処理)しているアクション- 私はAJAX呼び出しをトリガーします応答、減速機から
- 減速材Bからの応答でいくつかの状態(
state.session.id
)を追加したいB
減速機Aが減速機AがAJAX呼び出しを行う前に、どのように減速機Bが状態を追加するようにすることができますか?(Dan Abramovが泣かないように)
redux thunksやsagasのようなものをお使いですか?あなたが処理しているメッセージに既に入っている場合、なぜそれをセッションから取得する必要がありますか?しかし、あなたは減速機でAjaxコールをしていますか? –
はい私はサンクを使用しています。なぜ私は国家からIDを取得するのだろう...私はそれについて考えていると思う今、私はありません。私はちょうど考えていた "1つのアクションは、状態にIDを追加する別のアクションは、状態からIDを引っ張る"(しかし、あなたが気づいたので)私はすでに私がアクションで必要なすべてを持って、 (まあ、後のリクエストを除き、タイミングの問題はありません)。ありがとう!あなたが "このケースで定義すると、あなたはすでに必要なものすべてを持っている"という効果を出すために何かを入れたいと思うなら、私はそれをうれしく受け入れます。 – machineghost