【发布时间】:2020-05-06 02:57:57
【问题描述】:
我有一个关于 redux useSelector 相等性检查的问题。
参考 React Redux Hook 文档 (https://react-redux.js.org/api/hooks#equality-comparisons-and-updates)
useSelector 会对返回值和前一个值做引用比较,如果结果看起来不同,则强制重新渲染
我有一个像这样的默认博客商店状态
searcherParam: {
keyword: '',
categories: [],
tags: [],
},
在组件中,我使用 useSelector 来检索值
const searchParam = useSelector(state => state.Blog.searcherParam)
如果我调度一个动作来更新具有相同值的 searcherParam,组件将重新渲染,因为返回值是对象(浅比较)
所以我通过多次调用 useSelector 来检索值
const keyword = useSelector(state => state.Blog.searchrParam.keyword)
const categories = useSelector(state => state.Blog.searchrParam.categories)
const tags = useSelector(state => state.Blog.searchrParam.tags)
然后我发送一个操作以再次使用相同的值更新 searcherParam
组件不会重新渲染
我不明白的一点是为什么组件不重新渲染?
如果useSelector做引用比较,分类值(数组)不应该是同一个引用,分派后的标签也是一样
我有什么误解吗?谢谢
不重新渲染的原因是因为我通过useState保存了类别(来自redux store)。
并使用useState的值来调度,所以它是相同的参考......
这里是codeandbox,抱歉Q_Q愚蠢的问题
【问题讨论】:
标签: reactjs redux react-redux react-hooks