当前位置: 首页 > news >正文

【Zustand】从复杂到简洁:Zustand 状态管理简化实战指南

回忆一下,我们在使用Zustand时,是这样引入状态的(如下),通过解构的方式引入状态,但是这样引入会引发一个问题!

1.对象解构

比如说:

  • A组件用到了 hobby.rap 状态,而B组件 没有用到 hobby.rap 状态。
  • 但是更新hobby.rap这个状态的时候,A组件和B组件都会重新渲染。
  • 这样就导致了不必要的重渲染,因为B组件并没有用到hobby.basketball这个状态。

缺点:

  • 重复渲染,如果 useUserStore 中定义得其他 state 状态值改变。
  • 当前组件并没有用到其他state状态, 也是会触发渲染,产生性能问题!
  • 我们可以通过, 状态选择器、useShallow 来解决上面所说问题!
// A组件
import useUserStore from '../store/user'
const { hobby, name } = useUserStore()return (<div className="left"><h1>A组件</h1><div><h3>{name}</h3><div>{hobby.rap}</div></div></div>
)// B组件
const { name } = useUserStore()
return (<div className="left"><h1>B组件</h1><div><h3>{name}</h3></div></div>
)

2.状态选择器

  • 所以为了规避这个问题,我们可以使用状态选择器,状态选择器可以让我们只选择我们需要的部分状态,这样就不会引发不必要的重渲染。
  • 缺点:用到一个属性就需要手动定义一个,很麻烦、易出错。
import useUserStore from '../store/user'const name = useUserStore((state) => state.name)
const rap = useUserStore((state) => state.hobby.rap)

3.useShallow

Zustand 默认情况是它会严格比较两个对象是否相等, 没更新属性一次都会重新渲染!

  • 包裹 useShallow 之后,虽然返回的是一个新的对象,但是不会去对比两个新对象的引用地址;

  • 而是对比里面的属性是否发生变化,若是属性发生变化就会重新渲染;

  • 如果属性中没有包含 name, 它就不会去对比,也不会去更新!从而避免更新问题;

import { useShallow } from 'zustand/react/shallow';const { rap } = useUserStore(useShallow((state) => ({rap: state.hobby.rap,
})))

4.总结

使用 useShallow hooks 简化状态才是最优解。

http://www.xdnf.cn/news/1204885.html

相关文章:

  • 绿算技术携手昇腾发布高性能全闪硬盘缓存设备,推动AI大模型降本增效
  • Laravel 分页方案整理
  • 安宝特新闻丨Vuzix与Wyr.Ai合作推出基于M400眼镜的全新一代质检平台
  • springboot校园外卖配送系统
  • 【设计模式】状态模式 (状态对象(Objects for States))
  • Linux应用程序架构与软件包管理
  • Redis实战(3)-- 高级数据结构zset
  • MySQL5.7主从延迟高排查优化思路
  • Qt:盒子模型的理解
  • 电流变送器电路的分析与计算
  • TCPIP之常用协议
  • LeetCode--50.Pow(x,n)
  • RCLAMP2574N.TCT Semtech:超低钳位TVS二极管 0.5pF超低电容+±30kV超强防护
  • FastGPT本地构建工作流高级编排(最新4.11.0)
  • 【云馨AI-大模型】2025世界人工智能大会引爆全球AI热潮,技术突破与政策布局引领产业新未来
  • 4、如何生成分布式ID?
  • C++中既重要又困难的部分—类和对象
  • 【历史人物】【韩愈】简历与生平
  • sqlite3学习---基础知识、增删改查和排序和限制、打开执行关闭函数
  • 归雁思维:解锁自然规律与人类智慧的桥梁
  • LLM学习笔记5——InstructGPT
  • Kotlin的datetime库
  • Linux内核驱动开发核心问题全解
  • 四、计算机组成原理——第4章:指令系统
  • 基于Spring Boot+Vue的吉他社团系统设计和实现(协同过滤算法)
  • 飞鹤困局:增长神话的裂痕
  • 分布式数据库中的“分布式连接”(Distributed Joins)
  • 轻资产革命:连合直租如何用DaaS模式重塑企业资产逻辑
  • 阿里云 【免费试用】MCP 赋能可视化 OLAP 智能体应用
  • 网络安全第14集