You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

useSelector hook第二参数shallowEqual正确用法及本例使用差异

useSelector传入shallowEqual和默认对比逻辑的区别(结合当前场景)

结论先行:在你当前的代码场景下,传入shallowEqual和不传入没有任何区别。

  • 默认情况下,useSelector对两次selector返回值的对比采用**严格相等(===)**规则,只有返回值和上一次结果严格不等时,才会触发当前组件重新渲染。
  • shallowEqual是Redux提供的浅对比方法,规则如下:
    • 如果对比的是原始类型值(数字、字符串、布尔值、null、undefined),逻辑和===完全一致,直接对比值本身
    • 如果对比的是引用类型(对象、数组),不会递归校验深层属性,只会对比两个值的引用是否一致,或是第一层的所有属性值是否严格相等
  • 你的当前场景中,Redux根state本身就是数字类型的原始值,所以不管用默认的严格相等还是shallowEqual,对比逻辑完全相同,触发组件重渲染的时机没有任何差异。

只有当你的useSelector返回引用类型值(比如每次selector执行都会返回新的对象/数组)时,才需要传入shallowEqual来避免不必要的重渲染。比如以下场景:

// 这种写法每次selector执行都会返回新对象,默认严格相等会认为值发生变化,导致多余重渲染
const { count, name } = useSelector(state => ({
  count: state.count,
  name: state.user.name
}), shallowEqual)

内容的提问来源于stack exchange,提问作者Manfre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:27:02