我有一个显示帖子列表的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>
答案 0 :(得分:2)
快速回答:从thunk发送两个或更多动作没有问题,我认为这是一个很好的做法,特别是如果API Call响应包含两个完全不同的问题的答案。
我认为这取决于你想要代表什么,在你的情况下,你可以有一个代表添加新帖子的动作,两个不同的减速器可以抓住它并用它做不同的任务。 但你可以看到这是两个不同的动作(你的例子),它也很棒。
正如Sergey L所说,在你的情况下采取独特的行动(针对你的情况),它可以创造一个有趣的“依赖”
答案 1 :(得分:1)
如果您不考虑postLoaded而不调用updateVisiblePosts的情况,那么最好只在postsLoaded中处理状态更改。 特别是如果你需要它们同步。例如,如果您需要一个被授权者,则visible_post_ids不包含来自不存在/已加载帖子的ID。此外,它最大限度地减少了更新,因为每个调度都会导致React中的处理。
另一方面,将这些操作分开可以使代码更清晰,因为每个操作的实现都非常简单。