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

Zustand/React两种多状态获取写法(含简写)的重渲染表现是否一致?

结论:两种写法的重渲染表现完全不等同

两种写法的差异说明

  • 第一种官方写法的重渲染逻辑:
    每次调用useStore都传入了精准的状态选择器,Zustand会单独监听每个选择器返回值的变化。只有当state.nuts发生变更时,第一个useStore会触发组件重渲染;只有state.honey发生变更时,第二个useStore才会触发重渲染。store内其他不相关的状态变更完全不会影响当前组件。
  • 第二种简写写法的重渲染逻辑:
    不传选择器直接调用useStore()会返回整个store的根对象,此时组件会监听store的所有状态变更。不管是nuts、honey还是store里其他你完全没用到的属性发生变化,组件都会触发重渲染,会产生非常多不必要的性能开销。

替代写法(实现和官方写法一致的重渲染效果,同时支持解构)

如果你想要用解构的写法又不想引入多余的重渲染,可以搭配Zustand提供的shallow浅比较方法,写法如下:

import { shallow } from 'zustand/shallow'

// 只有nuts或者honey变化时才会触发重渲染,和分开写的效果完全一致
const { nuts, honey } = useStore(state => ({ 
  nuts: state.nuts, 
  honey: state.honey 
}), shallow)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 08:18:04