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

react状态管理库 - zustand

 什么是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.dtcms.com/a/268704.html

相关文章:

  • BitMart“滑点守护计划”二期重磅升级,定义安心交易新纪元
  • Redis哨兵模式之Sentinel模式(二)
  • vue3 强制刷新 forceUpdate
  • 关于使用shiro中Session的使用导致的Java 对象引用问题
  • 【BTC】比特币系统的具体实现
  • 《30天打牢数模基础-第一版》(已完结) 需要自取
  • 浅析德语OCR技术的实现难点及其工作原理
  • 怎么删除音频空白部分_去掉mp3空白部分
  • FlashDepth | 混合模型+Mamba革新,24 FPS实时2K视频深度估计,超越Depth Anything v2
  • 生成ssh并配置到vscode和gitlab详细步骤
  • 什么是Web3?金融解决方案
  • 内网使用rustdesk搭建远程桌面详细版
  • RedisTemplate在Spring Boot中的五种数据结构全面详解
  • 关于 c、c#、c++ 三者区别
  • Docker项目部署(黑马商城项目为例)
  • 可扩展 Redis 查询引擎的最佳实践
  • 开源鸿蒙(OpenHarmony)桌面版全面解析:架构适配、设备支持与开发实战
  • T01_神经网络
  • Linux 77 FTP
  • OpenCV 人脸分析------面部关键点检测类cv::face::FacemarkLBF
  • 【Java面试】如何保证Java应用的安全性
  • Node.js 后台系统 - 基本增删改查实现
  • 【Python】类中的参数传递
  • HBuilder Cli创建的uniapp项目,引入unoCss插件
  • 在本地部署mcp服务器实现自然语言操作mysql数据库,轻松实现数据表的增~ 删~ 改~ 查~
  • 七牛云Java开发面试题及参考答案
  • Unity接入Steamworks.NET实现通信功能
  • C#和SQL Server连接常用通讯方式
  • MsSql 其他(2)
  • Excel 的多线程特性