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

Redux Toolkit中的selector是否会触发不相关组件的重渲染?

问题解答

为什么选中用户时UserList没有重渲染

  • 你对useSelector的对比逻辑存在偏差:useSelector的引用对比触发重渲染的前提是**selector返回值的引用发生变化,并不是只要返回值是对象类型就一定会触发重渲染。
  • combineReducers的工作机制决定了,只有被action修改的reducer分片对应的state引用会更新,其余未被修改的分片state引用会完全保持不变。你派发的是仅修改user分片的action,form分片的状态没有被改动,state.form.submittedUser的引用和更新前完全一致,因此submittedUserSelector返回的对象引用没有变化,useSelector对比后判定值相同,UserList自然不会重渲染。
  • 只有当你在selector中每次主动返回新创建的对象(例如写法为state => ({user: state.form.submittedUser})),才会出现无论相关状态有没有修改都触发重渲染的问题,你当前的写法只是直接返回state中已有的对象引用,只要原对象没有被修改就不会出现这个问题。

关于selector求值范围的说明

这个能力是React-Redux提供的,和Redux Toolkit没有直接关联:

  • 每次store状态更新后,React-Redux会遍历所有调用了useSelector的组件,逐一运行每个组件绑定的selector函数,将返回值和该组件上一次缓存的selector返回值做引用对比,只有对比结果不同时才会触发该组件重渲染。
  • 每个组件的selector都是独立计算的,其他reducer的改动只要不影响当前selector的返回值,就不会触发对应组件重渲染。

相关官方说明位置

对应说明可以在React-Redux官方文档的useSelector使用规则章节,以及Redux官方文档的combineReducers工作原理章节查询到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:27:04