2016-12-15 82 views
0

因此,在简单的反应中,setState会触发render方法。现在,关于Redux,让我们说我发起了一个动作,从reducer返回的状态是全新的,所以它听起来像每个组件都应该更新,但我知道这不是真的,因为当我调试我的应用程序时,我可以看到它,再加上它听起来像可怕的表现。所以我的问题是,redux是否会在每个组件中查看它需要的状态片?在mapStateToProps?一般Redux如何决定何时调用渲染方法?Redux中的组件更新

我知道终极版中有优化...谢谢...

+0

“全新”并不意味着完整的深层复制。除非你正在改变状态树的每个节点。 –

回答

1

一个终极版商店提供subscribe()方法。当您使用connect()时,它会生成包装组件,这些组件在创建时会自动订阅商店。每个连接的组件都是独立的用户。

当调度操作时,商店运行所有订阅回调。包装组件然后调用store.getState()。作为第一次检查,如果根状态对象是===与前一个相同,则该组件将在此停止。 (这是减速机状态直接变化不好的原因之一)

下一步是调用提供的mapState函数并传入当前状态对象。包装器组件然后使用浅的相等比较检查比较从mapState返回的对象的内容与返回的对象的最后时间的内容。如果任何内容已根据浅表检查更改,则该组件知道需要使用新数据重新呈现“真实”组件。 (再次,“浅”检查是突变不好的另一个原因。)

+0

很好的答案,你可能想指出'redux'和'react-redux'是2个独立的模块。 :) –