2016-04-04 23 views
0

投稿のリストを表示するReduxアプリケーションがあります。私はその後、私はvisible_post_idsの内容を置き換え、postsに追加し、いくつかの記事を読み込むたびイディオム・リダックス:複数のアクションをディスパッチする

{ 
    posts: [ 
    {id: 1, title: 'My Post'}, 
    {id: 2, title: 'Also this one'}, 
    {id: 3, title: 'Other Post'} 
    ], 
    visible_post_ids: [1, 2] 
} 

:状態は多かれ少なかれ、このです。

これは、ロードの記事のための私の行動の作成者である:

function loadPosts (filters) { 
    return function (dispatch, getState) { 
    return fetch(`/posts.json?filters=${filters}`) 
     .then((response) => response.json()) 
     .then((posts) => { 
     dispatch(postsLoaded(posts)) // Will update `posts` 
     const postIds = posts.map((post) => post.id) 
     dispatch(updateVisiblePosts(postIds)) // Will update `visible_post_ids` 
     }) 
    } 
} 

私の質問は:それは、サンクから2つ(またはそれ以上)のイベントをディスパッチするために慣用のですか?それとも、私は1つだけ派遣し、それをさまざまな減速機で扱うべきですか?

答えて

1

それはupdateVisiblePostsを呼び出さずpostsLoadedすることが可能であるときに、シナリオを考慮していない場合は、それだけでpostsLoadedの状態変化に対応することをお勧めします。 特に同期させる必要がある場合。たとえば、visible_post_idsに既存の/読み込まれていない投稿のIDが含まれていないという権限を付与する必要がある場合です。それだけでなく、各ディスパッチがReactでの処理を引き起こすため、更新を最小限に抑えます。一方

、あなたは各アクションのために非常に単純な実装を持っているとして、これらのアクションを別々に持つことは、コードをより明確にすることができます。

2

クイック答え:サンクから二つ以上のアクションを派遣する問題がない、私はそれがAPIコール応答は2つの完全に異なるの懸念への回答が含まれている場合は特に、良い習慣だと思います。

私はあなたのケースでは、新しいポストと二つの異なる減速のアドオンを表す1つのアクションがそれをキャッチし、それを異なるタスクを行うことができますすることができ、それはあなたが表現しようとしているかによって決まりだと思います。 しかし、あなたは二つの異なるアクション(あなたの例)として、それを見ることができる、それがあまりにも素晴らしいことです。

Sergey Lが言っているように、独自のアクション(あなたの場合)の場合、興味深い "依存関係"を作成することができます

関連する問題