2017-01-16 4 views
2

私のリアクションアプリケーションでは、私はロングポーリングAPIを使用しています。すべてのレスポンスでリクエストを自動的に送信するために、ミドルウェアを使用します。しかし、新しいリクエストを送信する前に、私は受信したデータをストアに保存しなければなりません。それ以上に、ミドルウェアの中に別のアクションを送りたい。だから私の構造は次のようになります。ミドルウェアから状態を取得してディスパッチ

InitLongPoll() - >のsendRequest(データ) - > ReceiveResponse(データ)* - >のsendRequest(データ)

'*' 私のミドルウェアです。そこから私はstore.dispatch(responseData)を使用して店舗にデータを保存しており、store.dispatch(sendRequest(authData))を使用して新しいリクエストを送信しています。

store.getState().authReducerを使用してauthDataを受信できますか?私の知る限り、ミドルウェアは純粋な関数でなければならず、外部データ(ストア)に依存してはいけません。前もって感謝します。

答えて

3

store.getState()。authReducer?を使用してauthDataを受け取っても問題ありませんか?私の知る限り、私のミドルウェアは が純粋な関数でなければならず、外部データ(ストア)に依存すべきではありません。

はいです。ミドルウェアは、reduxループに副作用を導入する方法であり、純粋な関数にすることはできません。独自のミドルウェアには、サーバーをポーリングするという副作用があります。関数は常に同じ引数値(S)を所定の同じ結果値を評価

  1. A Reduxのミドルウェアとして定義され、純粋な関数の抗論文です。関数の結果値は、 隠し情報またはプログラム実行 が進行する間に変更される可能性のある状態に依存することはできません。また、I/Oデバイスからの外部入力(通常は以下を参照)に依存しません。

  2. 結果を評価しても、変更可能なオブジェクトの変異やI/Oデバイスへの出力(通常は以下を参照)など、意味的に観察可能な副作用や出力は発生しません。

また、それがgetStateを使用していること、redux-thunkソースコードに見ることができます:

function createThunkMiddleware(extraArgument) { 
    return ({ dispatch, getState }) => next => action => { 
    if (typeof action === 'function') { 
     return action(dispatch, getState, extraArgument); 
    } 

    return next(action); 
    }; 
} 
関連する問題