Zustand的学习和应用

news/2024/12/4 23:09:30/

Zustand 是一个轻量级的状态管理库,适用于 React 应用程序。它以简单易用、高性能和无模板代码的特性受到开发者的喜爱。

https://zustand.docs.pmnd.rs/guides/tutorial-tic-tac-toe

以下是 Zustand 的核心特点和用法简介:

Zustand 核心特点

  1. 轻量简单
    • Zustand 使用简单的 API 来创建和管理状态,几乎没有学习曲线。
    • 没有额外的模板代码,例如 action 或 reducer。
  2. 性能优异
    • 通过浅比较,只更新真正需要更新的组件。
    • 状态更新时,不会触发未使用状态的组件重新渲染。
  3. 灵活
    • 支持同步和异步状态更新。
    • 支持多状态库共存,可轻松集成到现有项目中。
  4. React 生态兼容
    • Zustand 的状态管理方式与 React 的 Hook 思想一致,容易上手。

Zustand 的高级功能

Zustand 支持中间件,可以用来扩展 Store 的功能,比如日志记录、持久化状态等。

使用 devtoolspersist 中间件

persis: 可以将状态持久化到浏览器存储。

devtools: 打开你的浏览器 Redux DevTools Extension,交互后,在 Redux DevTools 界面中,可以看的action、state

  1. 中间件(Middleware): Zustand 提供中间件支持,常见的有持久化和开发工具支持。

    import create from 'zustand';
    import { devtools, persist } from 'zustand/middleware';const useStore = create(persist( // 通过 zustand/middleware 的 persist,可以将状态持久化到浏览器存储。(set) => ({count: 0,increment: () => set((state) => ({ count: state.count + 1 })),}),{name: 'counter-storage', // 存储的 keygetStorage: () => localStorage, // 使用 localStorage})
    );
    
  2. 选择器优化: Zustand 支持按需订阅,避免不必要的渲染:

    const count = useStore((state) => state.count); // 只订阅 count// 从 Store 中提取状态和方法
    const count = useCounterStore((state) => state.count);
    const increment = useCounterStore((state) => state.increment)
    
  3. 异步操作: 支持在状态逻辑中使用异步函数:

    const useStore = create((set) => ({data: null,fetchData: async () => {const response = await fetch('https://api.example.com/data');const data = await response.json();set({ data });},
    }));
    

在这里插入图片描述


http://www.ppmy.cn/news/1552403.html

相关文章

机器学习概述,特征工程简述2.1——2.3

机器学习概述: 1.1人工智能概述 达特茅斯会议—人工智能的起点 机器学习是人工智能的一个实现途径 深度学习是机器学习的一个方法发展而来 1.1.2 机器学习和深度学习能做什么 传统预测 图像识别 自然语言处理 1.2什么是机器学习 数据 模型 预测 从历史数…

Selenium3+Python如何操作键盘

selenium操作键盘,需要导入Keys类:“from selenium.webdriver.common.keys import Keys” 调用键盘操作的快捷键的方法 : 单键值:直接传入对应的键值“element.send_keys”(快捷键的键值) 组合键:键值之间由逗号分隔…

大模型呼入机器人系统如何建设?

大模型呼入机器人系统如何建设? 作者:开源呼叫中心系统 FreeIPCC, Github地址:https://github.com/lihaiya/freeipcc 大模型呼叫中心呼入机器人系统的建设是一个涉及多个环节和领域的综合性工程。以下是一个详细的步骤指南,涵盖了…

python蓝桥杯刷题3

1.解方程组解 题解:首先让a,b,c进行遍历,然后计算得到1000时输出结果,其次考虑1000开根号是多大,计算得到32的倍数是1024,所有选择(1,32)进行遍历&#xff0c…

Python的秘密基地--[章节2]Python核心数据结构

第2章:Python核心数据结构 Python中的数据结构提供了强大的工具来存储和操作数据。理解这些数据结构是Python编程的基础。 2.1 列表(List) 2.1.1 什么是列表 列表是一种有序的可变序列,用于存储一组数据。它支持多种类型的数据…

基于Java Springboot在线答题微信小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse微信开…

机器学习快速入门(黑马程序员版)

1.机器学习概述 1.1-人工智能描述 1.1.1机器学习与人工智能、深度学习 三者关系:1.机器学习是人工智能的一个实现途径。2.深度学习是机器学习的一个方法发展而来。 人工智能的起点——达特茅斯会议 1956年8月,在美国汉诺斯小镇宁静的达特茅斯学院中&…

洛谷 B2029:大象喝水 ← 圆柱体体积

【题目来源】https://www.luogu.com.cn/problem/B2029【题目描述】 一只大象口渴了,要喝 20 升水才能解渴,但现在只有一个深 h 厘米,底面半径为 r 厘米的小圆桶 (h 和 r 都是整数)。问大象至少要喝多少桶水才会解渴。 …