浅层 prop 比较对于连接的组件如何工作?

sub*_*rat 5 reactjs react-native redux react-redux

根据 redux 的文档,reducer 总是给出一个新的状态副本。mapStateToProps在连接的组件中,react-redux 对(旧的与新的 props)中提到的属性进行浅层比较。

我的困惑是,由于 redux 总是提供新的状态副本,react-redux 所做的浅层比较应该总是给出 false,并且组件应该总是重新渲染。但这并没有发生。

有人可以解释我缺少什么吗?

我正在考虑在 mapStateToProp 中读取的所有属性都是对象。

Tom*_*mer 0

我们都同意,mapStateToProps如果存储状态相同,则不会运行。redux 文档是这样的:

connect 生成的包装器组件订阅 Redux 存储。每次分派一个操作时,它都会调用store.getState() 并检查是否lastState === currentState. 如果两个状态值通过引用相同,则它将不会重新运行您的 mapStateToProps函数,因为它假设存储状态的其余部分也没有更改。

为什么 我的组件没有重新渲染,或者我的 mapStateToProps 没有运行?可以描述您的情况,因为您可能会意外地直接改变您的状态。

由于您使用的是“combineReducers”(虽然这很棒),但还有一个“问题”:

combineReducers实用函数尝试优化状态更新。如果没有切片减速器返回新值,则combineReducers返回旧状态对象而不是新状态对象。这意味着减速器中的突变可能会导致根状态对象未更新,因此 UI 不会重新渲染。