惯用的Redux:发送多个动作

时间:2016-04-04 09:30:56

标签: redux redux-thunk

我有一个显示帖子列表的Redux应用程序。国家或多或少是这样的:

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

每当我加载一些帖子时,我都会将其添加到posts,然后我会替换visible_post_ids的内容。

这是我加载帖子的动作创建者:

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`
      })
  }
}

我的问题是:从thunk发送两个(或更多)事件是否惯用?或者我应该只派遣一个并在各种减速器中处理它?<​​/ p>

2 个答案:

答案 0 :(得分:2)

快速回答:从thunk发送两个或更多动作没有问题,我认为这是一个很好的做法,特别是如果API Call响应包含两个完全不同的问题的答案。

我认为这取决于你想要代表什么,在你的情况下,你可以有一个代表添加新帖子的动作,两个不同的减速器可以抓住它并用它做不同的任务。 但你可以看到这是两个不同的动作(你的例子),它也很棒。

正如Sergey L所说,在你的情况下采取独特的行动(针对你的情况),它可以创造一个有趣的“依赖”

答案 1 :(得分:1)

如果您不考虑postLoaded而不调用updateVisiblePosts的情况,那么最好只在postsLoaded中处理状态更改。 特别是如果你需要它们同步。例如,如果您需要一个被授权者,则visible_post_ids不包含来自不存在/已加载帖子的ID。此外,它最大限度地减少了更新,因为每个调度都会导致React中的处理。

另一方面,将这些操作分开可以使代码更清晰,因为每个操作的实现都非常简单。