2017-02-04 14 views
0

が、私は私の再来のいずれかに電話をかける完了した後に実行されていることを確認し、このようなアクション:Reduxの、その呼び出しはReduxのは

performAction(updatesomevalue); 

と上記のアクションが終了したとき、私はどこかで自分の状態を送信したい:

sendState(state); 

どのようにこれらの通話をチェーンできますか?アクションはコールバックを持っていないので、私はそのアプローチを使用することはできません。とにかくそれをやることの還元的な方法ではないかもしれないと思いますか?

+0

簡単な方法は、reducexアクション処理コード内で 'setTimeout'コールを介してJSイベントキューに追加することです。私は副作用が必要なときにこれをたくさん行ってきましたが、sendState(reduxの流れの外側)で状態を変更すると、おそらく悪い時間がかかるでしょう。 – Josh

+0

'performAction'を呼び出すコードがコールバックを渡す必要があり、その結果を使用する場合は、IMHOをコールバックで実行する必要があると判断します。イベントフロー/その代わりに還元状態を使用して、そのコールバックの必要性を取り除きます。私はこれもやっている(約束と行動からのコールバック)が、私の意見では、それはもっと壊れやすいと思うのは難しいです。 – Josh

答えて

0

非同期Reduxのアクション非同期Reduxのアクションを扱う

最も簡単な解決策は、Reduxの-サンクを使用することですreduxが、サンク。

Reduxの-サンクの目的

は、それがなぜ機能を返すアクションを派遣したいと思う

(おそらくに使用されている正規の古いオブジェクトではなく)私たちがアクションとしての機能を派遣することを可能にするということです?

この質問は、次のように言い換えることができます。 - レフィックス・サンクはなぜ有用なライブラリですか?

機能をディスパッチできる場合。その後、この関数にはreduxストアAPIへのアクセス権が与えられます。したがって、アクションが呼び出されると、ストアの現在の状態とディスパッチにアクセスできます。ディスパッチにアクセスすることは、この機能が追加のレビュックスアクションをディスパッチできることを意味するので重要です。ここでは、関数を返すredux-thunkシグネチャに続くreduxサンクアクションクリエータの例を示します。

このredux thunkアクションの作成者は、外部のapiを呼び出し、そのasync api呼び出しの結果で状態を更新するなど、初期の非同期アクションを送出します。

新しい状態が取得され、追加のアクションをディスパッチするために使用されます。 最初の非同期APIを作るために、約束ベースのリクエストライブラリであるisomorphic-fetchライブラリを使用しています。これがfetchを呼び出してfetchを呼び出して呼び出し可能にする理由です。

import fetch from 'isomorphic-fetch' 

// call api then update state and dispatch second sync action 
// based on new state 
function thunkActionCreator() { 
    return (dispatch, getState) => { 

    return fetch(`http://www.example.com/api/users/${id}`) 
      .then(response => { 
       // if request successful dispatch action 
       // using response data to change state 
       if (response.status !== 200) { 
       dispatch(firstAction(response.data)) 
       } 

       // get the new state 
       const secondState = getState() 

       // use this newState to dispatch a new action 
       dispatch(secondAction(secondState)) 
      }) 
    } 
} 

あなたはReduxの-サンクは、それがミドルウェアチェーンに座っているミドルウェアの一部ですので、ミドルウェアチェーン

import { createStore, applyMiddleware } from 'redux'; 
import thunk from 'redux-thunk'; 
import rootReducer from './reducers/index'; 

// Note: this API requires [email protected]>=3.1.0 
const store = createStore(
    rootReducer, 
    applyMiddleware(thunk) 
); 

にReduxの-サンクを追加する必要があります忘れないでください。アクションが任意のreduxアプリケーションにディスパッチされると、完全なミドルウェアチェーンを経由し、各ミドルウェアは、アプリケーションで発生したアクションをconsole.logoutするredux-loggerの場合のようなカスタム機能を実装します。

関連する問題