什么是zustand?

      zustand 是一个轻量级、快速且可扩展的 React 状态管理库,旨在提供一种简单直接的方式来管理应用状态,而无需其他解决方案通常伴随的繁琐代码。根据官方 Zustand 文档,Zustand 是“一个使用简化 flux 原理的小型、快速且可扩展的精简状态管理解决方案”。它允许开发者创建包含状态和操作的 store,这些 store 可以通过 React hooks 进行访问和更新。

中文官网 

Zustand 中文网

安装

npm install zustand

基础使用

创建store
import { create } from 'zustand'const useStore = create((set) => ({  //set是用来修改数据的专门方法,必须调用它来修改数据//状态数据  bears: 0,//修改方法increasePopulation: () => set((state) => ({ bears: state.bears + 1 })), //加一removeAllBears: () => set({ bears: 0 }),//置0updateBears: (newBears) => set({ bears: newBears }),//接收传递的值并赋值
}))
export default useStore
绑定组件并使用

import useStore from '../../zustand'
const Month = () => {const bears = useStore((state) => state.bears)const { increasePopulation, removeAllBears, updateBears } = useStore()return (<div> {bears}<button onClick={increasePopulation}>加一</button><button onClick={removeAllBears}>置0</button><button onClick={()=>updateBears(3)}>传值</button></div>)
};
export default Month;

异步使用

异步实现接口请求更改数据 
import axios from 'axios'
import { create } from 'zustand'const useStore = create((set) => ({listData:[],changeList:async()=>{let res =await axios.get('https://api.taolale.com/api/xjj/get?key=KadadfdgfdhhjGEK')set({listData:res.data.data})}}))
export default useStore
 组件调用

import useStore from '../../zustand'
const Month = () => {const list = useStore((state) => state.listData)const { changeList} = useStore()return (<div> {list}<button onClick={changeList}>获取数据</button></div>)
};
export default Month;

切片模式(模块化)

拆分模块,在组合起来 

场景:当单个store比较大的时候,可以采用切片模式进行模块拆分组合,类似于模块化

模块一  createBearSlice.js
const createBearSlice = (set) => ({bears: 0,addBear: () => set((state) => ({ bears: state.bears + 1 })),eatFish: () => set((state) => ({ fishes: state.fishes - 1 })),
})
export default createBearSlice
模块二  createFishSlice.js
const createFishSlice = (set) => ({fishes: 0,addFish: () => set((state) => ({ fishes: state.fishes + 1 })),
})
export default createFishSlice
组合模块  index.js

import { create } from 'zustand'
import  createBearSlice from './createBearSlice'
import  createFishSlice from './createFishSlice'const useBoundStore = create((...a) => ({...createBearSlice(...a),...createFishSlice(...a),
}))
export {useBoundStore}
 组件使用  直接解构使用

import { useBoundStore } from './store/index'
const Month = () => {const { bears,fishes,addBear} = useBoundStore()return (<div> {fishes}{bears}<button onClick={addBear}>加一</button></div>)
};
export default Month;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/88308.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88308.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/88308.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

粗排样本架构升级:融合LTR特征提升模型性能的技术实践

粗排样本架构升级&#xff1a;融合LTR特征提升模型性能的技术实践 ——基于PySpark的样本构建与特征工程深度解析 一、粗排系统的定位与技术演进 在推荐系统级联架构中&#xff0c;​粗排&#xff08;Rough Ranking&#xff09;​​ 承担着关键过渡角色&#xff1a;从召回层获…

CCF-GESP 等级考试 2025年6月认证C++四级真题解析

1 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09;第1题 在C中&#xff0c;声明一个指向整型变量的指针的正确语法是&#xff08; &#xff09;。A. int* ptr; B. *int ptr; C. int ptr*; D. ptr …

PlantUML 在 IDEA 中文版中的安装与使用指南

目录 摘要 一、安装 PlantUML 插件 二、配置 PlantUML 运行环境 三、创建 PlantUML 文件 四、编写 PlantUML 代码 五、生成并查看图表 六、自动生成类图&#xff08;重点新增&#xff09; 6.1 从 Java 类生成类图 6.2 类图语法详解 6.3 类图高级技巧 七、常见问题及…

创客匠人:创始人 IP 打造中 “放下身段” 的深层逻辑

在 IP 经济火热的当下&#xff0c;无数创始人投身 IP 打造&#xff0c;却鲜少有人意识到&#xff1a;真正能实现 IP 变现的核心&#xff0c;并非专业知识的堆砌&#xff0c;而是与用户建立 “可交往” 的连接。创客匠人通过多年服务 IP 的实践发现&#xff0c;那些穿越周期的创…

C语言<数据结构-链表>

链表是一种常见且重要的数据结构&#xff0c;在 C 语言中&#xff0c;它通过指针将一系列的节点连接起来&#xff0c;每个节点可以存储不同类型的数据。相比数组&#xff0c;链表在插入和删除元素时不需要移动大量数据&#xff0c;具有更好的灵活性&#xff0c;尤其适合处理动态…

基于Matlab多特征融合的可视化指纹识别系统

针对中小规模&#xff08;百级&#xff09;指纹模板库中常见的脊线断裂、噪声干扰以及结果缺乏可解释性等难点&#xff0c;本文提出并实现了一种基于多特征融合的可视化指纹识别系统。系统整体采用模块化设计&#xff1a;在预处理阶段&#xff0c;先通过改进的灰度归一化与局部…

50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | DoubleVerticalSlider(双垂直滑块)

&#x1f4c5; 我们继续 50 个小项目挑战&#xff01;—— DoubleVerticalSlider组件 仓库地址&#xff1a;https://github.com/SunACong/50-vue-projects 项目预览地址&#xff1a;https://50-vue-projects.vercel.app/ 使用 Vue 3 的 Composition API&#xff08;<scrip…

mysql join语句、全表扫描 执行优化与访问冷数据对内存命中率的影响

文章目录join执行逻辑Index Nested_Loop Join&#xff08;NLJ&#xff09;MMR(Mutli-Range Read) 优化BKA(Batched Key Access)算法Simple Nested_Loop JoinBlock Nested-Loop Join&#xff08;BLJ&#xff09;join buffer 一次放不下 驱动表join buffer优化的影响&#xff1a;…

【LeetCode100】--- 1.两数之和【复习回滚】

题目传送门 解法一&#xff1a;暴力枚举&#xff08;也是最容易想到的&#xff09; class Solution {public int[] twoSum(int[] nums, int target) {int n nums.length;for(int i 0; i < n; i){for(int j i1; j<n; j){if(nums[i] nums[j] target){return new int…

opencv提取png线段

import cv2 import matplotlib.pyplot as plt import numpy as np# 读取图像 image cv2.imread(./data/1.png) if image is None:print("无法读取图像文件") else:# 转换为灰度图像gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 使用Canny边缘检测edges cv2.Can…

计算机网络:概述层---计算机网络概念解析

计算机网络的概念详解 &#x1f4c5; 更新时间&#xff1a;2025年07月6日 &#x1f3f7;️ 标签&#xff1a;计算机网络 | 网络基础 | 互联网 | TCP/IP | 路由器 文章目录前言一、计算机网络的发展历程二、什么是计算机网络&#xff1f;1. 计算机网络的基本功能2. 计算机网络的…

springMVC04-Filter过滤器与拦截器

一、Filter&#xff08;过滤器&#xff09;和 Interceptor&#xff08;拦截器&#xff09;在 SpringMVC 中&#xff0c;Filter&#xff08;过滤器&#xff09;和 Interceptor&#xff08;拦截器&#xff09;都是对请求和响应进行预处理和后处理的重要工具&#xff0c;但它们存在…

STM32第十九天 ESP8266-01S和电脑实现串口通信(2)

1&#xff1a;UDP 传输UDP 传输不不区分 server 或者 client &#xff0c;由指令 ATCIPSTART 建⽴立传输。 1. 配置 WiFi 模式 ATCWMODE3 // softAPstation mode 响应 : OK 2. 连接路路由器器 ATCWJAP"SSID","password" // SSID and password of router 响…

大健康IP如何用合规运营打破“信任危机”|创客匠人

一、行业乱象下的信任裂痕当前大健康领域私域直播乱象频发&#xff0c;部分机构利用“假专家义诊”“限量抢购”等话术&#xff0c;将低成本保健品高价卖给老人&#xff0c;甚至有技术公司提供“全链路坑老方案”&#xff0c;加剧行业信任危机。这种短视行为不仅损害消费者权益…

MySQL(122)如何解决慢查询问题?

解决慢查询问题通常涉及到多种技术和方法&#xff0c;以确保数据库查询的高效性和响应速度。以下是详细步骤和示例代码&#xff0c;阐述如何解决慢查询问题。 一. 慢查询的常见原因 缺少索引&#xff1a;查询未使用索引或索引未优化。查询不当&#xff1a;查询语句本身书写不合…

esp32在vscode中仿真调试

此方法可以用在具有usb serial jtag功能的esp32芯片用&#xff0c;支持型号&#xff1a; ESP32-C3 ESP32-S3 ESP32-C6 ESP32-H2 ESP32-C5 USB Serial JTAG功能介绍&#xff1a; 从硬件角度&#xff1a; 它是ESP32芯片内置的硬件功能 不是一个独立的物理接口 是通过USB接口实…

蓝桥云课 矩形切割-Java

目录 题目链接 题目 解题思路 代码 题目链接 竞赛中心 - 蓝桥云课 题目 解题思路 找最大的正方形就是大边-n个小边&#xff0c;直至相等或者小于1 代码 import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {public static voi…

PostgreSQL 锁等待监控,查找等待中的锁

直接贴SQLWITH RECURSIVE l AS (SELECT pid, locktype, mode, granted, ROW(locktype,database,relation,page,tuple,virtualxid,transactionid,classid,objid,objsubid) objFROM pg_locks ), pairs AS (SELECT w.pid waiter, l.pid locker, l.obj, l.modeFROM l wJOIN l ON l.…

Elasticsearch 字符串包含子字符串:高级查询技巧

作者&#xff1a;来自 Elastic Justin Castilla 想要获得 Elastic 认证&#xff1f;看看下一次 Elasticsearch Engineer 培训什么时候开始吧&#xff01; Elasticsearch 拥有大量新功能&#xff0c;可以帮助你为你的使用场景构建最佳的搜索解决方案。深入了解我们的示例 noteb…

Vue、Laravel 项目初始化命令对比 / curl 命令/ CORS 机制总结与案例

前言一个疑问衍生出另一个疑问再衍生出又一个疑问&#xff0c;于是有了这篇文章。一、Vue 项目初始化命令 基于 Vite 创建 Vue 项目 命令&#xff1a;npm create vitelatest my-project -- --template vue适用场景&#xff1a;需轻量级、高速开发环境关键点&#xff1a;使用 Vi…