2017-06-26 10 views
3

私はReduxのでアクションの以下の2つのスタイルを参照してください。React/Reduxの2つのスタイルのアクション?

export function createFoo(foo) { 
    return { 
    type: ActionTypes.CREATE_AUTHOR,, 
    foo 
    } 
} 

...と他のチュートリアル(PluralSight)から:the documentationから

export function createFoo(foo) { 
    var newFoo = FooApi.saveFoo(foo); 

    Dispatcher.dispatch({ 
    actionType: ActionTypes.CREATE_FOO, 
    foo: newFoo 
    }); 
} 

後者が持っているように見えますより多くの責任、作成者インスタンスの作成、およびイベントのディスパッチ。

なぜアプローチに違いがありますか?これらの2つの別々のイディオムがあります(ミドルウェアがディスパッチを実行することを期待しているかもしれません)。

+0

アクションをコンポーネントに接続する方法に違いがあります。 React DOCSの最初のケースでは、接続機能を使用して、ディスパッチ –

+0

を提供します。最初のケースでは、レデューサーは純粋ではありませんでしたか? (リデューサーはAPIをsaveFooに呼び出すためのロジックをカプセル化する必要があるため) – Ben

+0

リダクターはアクションを受け取り、そのアクションに基づいて状態を更新します。また、店舗を正しく設定すると、すべてのレデューサーがそのアクションを受け取ります。 –

答えて

2

2番目の例は、ReduxではなくFluxの元の実装のようです。 Reduxには別の "ディスパッチャ"はなく、アクションにはtypeフィールドが必要です。

私のブログ投稿The Tao of Redux, Part 1 - Implementation and Intentを読むことに興味があります。これには、Reduxが要求する実際の技術的な制限とその理由、そしてその作成の歴史と元の意図が詳しく説明されています。

+0

ありがとうございます。フラックスにはディスパッチャがあります。 Reduxはコンセプトを排除するフラックスの実装ですか? (今あなたのリンクを読む...)。私の2番目の例は、例えばAPI呼び出しのロジックを含んでいます。それはどこにあるのだろうか?減速機、または私は純粋な減速機をしたい場合は、サンク? – Ben

+0

減速機では絶対に** NOT **です。 Reducersは常に純粋な関数、 '(state、action)=> newState'でなければなりません。副作用がReduxにどのようにフィットするかについては、[副作用に関するRedux FAQのエントリ](http://redux.js.org/docs/faq/Actions.html#actions-side-effects)を参照してください。特にDan's SOは[ミドルウェアを使って非同期作業を行う](http://stackoverflow.com/questions/34570758/why-do-we-need-middleware-for-async-flow-in-redux)と[Reduxでのタイムアウトの処理] (http://stackoverflow.com/questions/35411423/how-to-dispatch-a-redux-action-with-a-timeout/35415559)。 – markerikson

関連する問題