该redux文档指出,当使用redux与反应时,使用react-redux
包中的connect
。这应该没有必要shouldComponentUpdate
- http://redux.js.org/docs/basics/UsageWithReact.html#implementing-container-components避免重新渲染不可能 - 但文档说应该不需要shouldComponentUpdate
终极版库的connect()函数,它提供了许多有用的优化,以防止不必要的重新渲染。 (这样做的一个结果是,你不应该担心自己实施shouldComponentUpdate的表现作出反应的建议。)
但是我的组件unnecesarily更新,因为我每天都尽管内容时returing一个新的数组的数组是一样的。这里是我的代码:
const AssetManagerSmart = connect(
function(state) {
const { assets } = state;
return {
assetIds: assets.map(asset => asset.id)
}
}
)
看到这个assetIds
,它是一个地图从Redux的状态数组。这导致我的组件重新渲染。为了简化上面的代码,我们可以想像assetIds
被分配到一个新的浅等于阵列每次,像这样:
const AssetManagerSmart = connect(
function(state) {
const { assets } = state;
return {
assetIds: ['hi']
}
}
)
怎么会在文档说我不应该需要shouldComponentUpdate
当我遇到上面?上面我看到每个人都在做,即使在官方的redux文档中的“用法与反应”部分。
谢谢@OriDrori,但我不明白为什么了Redux文档是说没有必要forComponentUpdate。使用记忆会增加空间复杂性。一个简单的浅比较会做的伎俩不是?此外,为什么要记忆'getAssets',因为redux存储中的'assets'字段只会在某些更改(如果reducers正确完成)时才会更改,所以这是一个简单的引用检查,“connect”连这个都不简单参考检查? – Blagoh
在这里的'options'部分 - https://github.com/reactjs/react-redux/blob/master/docs/api.md#arguments - 它解释了如果'pure'是'true',它确实比较浅和参考平等,所以记忆'getAssets'不是正确的? – Blagoh
我已经更新了答案。看看它是否给你你需要的信息。 'getAssets'不被记忆(它只是返回一个对状态的引用)。 –