Redux 订阅调用整个状态
Redux subscribed called for entire state
我有两个减速器,redA 和 redB。我还有两个控制器 ctrlA 和 ctrlB.
目前,当 redA 或 redB 中的状态发生变化时,因为 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;
});
这不是您在生产中应该做的,但它展示了基本思想:保持对旧状态的引用,获取当前状态,在两者之间进行某种比较。
我有两个减速器,redA 和 redB。我还有两个控制器 ctrlA 和 ctrlB.
目前,当 redA 或 redB 中的状态发生变化时,因为 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;
});
这不是您在生产中应该做的,但它展示了基本思想:保持对旧状态的引用,获取当前状态,在两者之间进行某种比较。