Redux订阅了整个州

时间:2017-11-07 13:48:41

标签: javascript redux reducers

我有两个减速器, redA redB 。我还有两个控制器 ctrlA ctrlB

目前,当状态发生变化时, redA redB ,因为 ctrlA ctrlB 两者都调用了store.subsribe(),当状态发生变化时它们都会得到通知,无论减速器是什么引起的。

有没有办法只根据哪个减速机做出改变来通知控制器(或者甚至更好,根据每个动作通知它们?)

或者这是我对REDUX的思考方式的错误?听到你的意见,我将不胜感激。非常感谢

1 个答案:

答案 0 :(得分:1)

这就是Redux的工作方式。 Redux对其状态的不同部分没有不同的更改事件。实际上,订阅回调是在每个时间内一个动作到达根减速器功能的情况下运行的,即使没有因为该分派的动作而被更改。

Redux只是通知订阅者已分派某个动作,现在由订阅者根据当前状态确定他们想要做什么。通常这涉及将当前状态与旧状态区分开来,而React-Redux的connect()函数会生成自动为您执行此操作的包装器组件。

所以是的,如果您有两个订阅商店的不同组件,即使state.a已更新且组件仅对{{1感兴趣, }}

此外,“手动”订阅商店是个坏主意。我写了一篇长评explaining why you should use connect() to interact with the Redux store in a React app

修改

以下是订户如何区分状态的示例:

state.b

这不是你应该如何在制作中做到的,但它显示了基本的想法:保持对旧状态的引用,获取当前状态,在两者之间进行某种比较。