Redux 订阅调用整个状态

Redux subscribed called for entire state

我有两个减速器,redAredB。我还有两个控制器 ctrlActrlB.

目前,当 redAredB 中的状态发生变化时,因为 ctrlA[=27] =] 和 ctrlB 都调用了 store.subsribe(),无论是什么 reducer 引起的,它们都会在状态发生变化时收到通知。

有没有一种方法可以仅根据哪个减速器进行更改来通知控制器(或者更好的是,在每个操作的基础上通知它们?)

或者这是我对 REDUX 的思考方式中的错误?我很高兴听到你的意见。非常感谢

这就是 Redux 的工作原理。 Redux 对于其状态的不同部分没有不同的变化事件。事实上,订阅回调是 运行 every 一次 action 到达根 reducer 函数,即使 nothing 由于派遣行动。

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

所以是的,如果您有两个不同的组件订阅了商店,即使 state.a 已更新并且组件只对 state.b.

此外,"manually" 订阅商店也不是个好主意。我写了长评论explaining why you should use connect() to interact with the Redux store in a React app.

编辑

这是订阅者如何区分状态的示例:

let prevState;

store.subscribe(() => {
    const currState = store.getState();
    const stateHasChanged = !_.isEqual(currState, prevState);

    prevState = currState;
});

这不是您在生产中应该做的,但它展示了基本思想:保持对旧状态的引用,获取当前状态,在两者之间进行某种比较。