2016-06-16 9 views
0

すべてのポイントを取得できません:はReduxの-サンクミドルウェア

私はサンクと呼ばれる概念がある非同期アクションhttp://redux.js.org/docs/advanced/AsyncActions.html

についてのチュートリアルに従うことをしようとすると、私は、Reduxのにはかなり新しいです私たちが非同期アクションを行うためにサンクを必要としている理由を知りません。単にinitシグナルを送出してからデータをフェッチし、フェッチ・データからfinishシグナルをディスパッチできないのはなぜですか?

function fetchDataAction(dispatch){ 
    dispatch({ 
     type: "START" 
    }) 
    fetch("DATA_URL") 
     .then(function(res){return res.json();}) 
     .then(function(json){ 
      dispatch({ 
       type: "SUCCESS", 
       data: json 
      }) 
     }) 
} 

+0

あなたはあなたの質問にかなりのサンクを記述しました。データのフェッチは非同期的に行われるため、ディスパッチは応答を受け取った後にのみ起動できます。 –

+0

@MarioTackeありがとう、サンクは私がここに入れたことをするための単なる言葉です?私の操作の大部分が単にデータをフェッチしているのであれば、サンクは必要ありません。 – Kuan

+1

サンクスはファンシーな言葉以上のものです。それは私が理解しているように、reduxが動作する方法は、すべてのアクションは、減速機が直ちに消費できるアクションを返さなければなりません。非同期アクションは後でデータを返すので(読み込み:すぐにはなりません)、データを受け取ったら特定のアクションを実行するために、アベニューを開く必要があります。このため、多くのプロジェクトでは 'redux-thunk'ミドルウェアが使用されています。 –

答えて

1

Reduxの店が唯一のアクションとしてプレーンなオブジェクトを認識していただきありがとうございます。したがって、ストアにはdispatchのオブジェクトしかありません。 redux-thunkは、機能をアクションとして認識するよう店舗に教える。 redux-thunkについての詳細情報については 、作者自身から読み:それについて考えるためにHow to dispatch a Redux action with a timeout?

他の方法はredux-thunkはあなたがあなたが望むものは何でも派遣できるように、直接dispatchにアクセスする方法を提供するということです。

redux-thunkを指定しないと、アクションクリエーターのパラメータとしてdispatchが設定されていません。この場合、fetchDataActionは、redux-thunkdispatchにパラメータとして指定されているためにのみ機能します。