2017-05-04 64 views
1

例如,如果我有登录缩减器和用户图标缩减器。当我登录时,我想更新用户图标以及存储用户的信息。我卡在两个选项之间:Redux减速器之间的共享动作与触发多个动作

首先是导出USER_LOGIN操作并同时使用登录缩减器和用户图标缩减器处理USER_LOGIN操作。

第二种方法是在动作和缩减器之间有一个1到1的映射(一种动作只属于一个缩减器)。我们有登录简化器句柄USER_LOGIN,然后用Saga/Thunk我们向用户图标简化器发送副作用UPDATE_USER_ICON。

哪一个更好?我个人喜欢第二种方法。

+1

让我们不要忘记添加评论,同时降级任何答案。 – alpeshpandya

回答

1

引述Redux FAQ entry on dispatching multiple actions

有你如何组织自己的行为没有具体的规则。使用像Redux Thunk这样的异步中间件当然可以实现诸如在一行中分派多个不同但相关的动作,分派动作以表示AJAX请求的进展,基于状态有条件地分派动作,或者甚至分派动作并立即检查更新的状态之后。

一般来说,问这些行为是相关但独立的,还是实际上应该表示为一个行为。对自己的情况做些有意义的事情,但试着平衡减速器的可读性和动作日志的可读性。例如,包含整个新状态树的操作将使您的reducer成为一行,但缺点是您现在没有关于变化发生的原因的历史记录,所以调试变得非常困难。另一方面,如果你在一个循环中发出动作以保持细化,这表明你可能想要引入一个以不同方式处理的新动作类型。

尽量避免在关注性能的地方连续调度多次。还有一些插件和方法可以批量发送。

1

我会说你的第一种方法更好,那就是我常用的方法。是的,当多个reducer采取相同的操作类型时,它可能会影响代码的可读性,但它有助于减少冗长的代码(这是我对React生态系统的主要抱怨)以及一些性能。像登录这样的操作不会对性能产生巨大影响,但是当我在用户操作上进行API调用时,我只是在多个Reducer中处理相同的操作类型。为了便于阅读,我添加了评论和文档。

0

您确实需要在Redux中存储用户图标吗?在这种情况下更好的方法是有一个选择器根据登录用户返回图标。这样你就可以保持商店中的最小数量的状态。可以使用Reselect库来缓存选择器。

相关问题