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

zustand - 状态管理

Zustand 是一个轻量、快速且灵活的 React 状态管理库

同步修改

//zustand
import { create } from "zustand"//1.创建store//①:函数参数必须返回一个对象 对象内部编写状态数据和方法
//②:set是用来修改数据的专门方法必须调用它来修改数据
// 语法1:参数是函数, 需要用到老数据的场景
// 语法2:参数直接是一个对象   set({count : 100})
const useStore = create((set)=>{return {//状态数据count: 0,//修改状态数据的方法inc:()=>{set((state)=>({count:state.count +1}))}}
})//2. 绑定store到组件
//useStore => {count , inc}function  PreZustand(){const {count,inc} = useStore()return (<><button onClick={inc}>{count}</button></>)
}export default PreZustand

异步支持

在函数中编写异步逻辑,最后只需要调用set方法传入新状态即可

//zustand
import { useEffect } from "react"
import { create } from "zustand"
const URL = ''
//1.创建storeconst useAsyncStore = create((set)=>{return {channelList: [],fetchGetList:async()=>{const res = await fetch(URL)const jsonRes = await res.json()console.log(jsonRes)set({channelList: jsonRes.data.channels})}}
})//2. 绑定store到组件function  PreZustand(){const {fetchGetList,channelList} = useAsyncStore()useEffect(()=>{fetchGetList()},[fetchGetList])return (<><ul>{channelList.map(item=><li key={item.id}>{item.name}</li>)}</ul></>)
}export default PreZustand

切片模式

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

import { useEffect } from "react"
import { create } from "zustand"
const URL = 'http://geek.itheima.net/v1_0/channels'//1.拆分子模块 再组合起来//创建counter相关的切片
const createCounterStore = (set)=>{return {//状态数据count: 0,//修改inc: ()=>{set(state => ({count:state.count +1}))}}
}//创建channel相关切片
const createChannelStore = (set)=>{return {channelList: [],fetchGetList: async ()=>{const res = await fetch(URL)const jsonData = await res.json()set({channelList: jsonData.data.channels})}}
}//组合切片
const useStore = create((...a) => ({...createCounterStore(...a),...createChannelStore(...a)
}))function PreZustand2(){const {count,inc,channelList,fetchGetList} = useStore()useEffect(()=>{fetchGetList()},[fetchGetList])return (<><button onClick={inc}>{count}</button><ul>{channelList.map((item)=>(<li key={item.id}>{item.name}</li>))}</ul></>)}export default PreZustand2

相关文章:

  • 5G 核心网切换机制全解析:XN、N2 与移动性注册对比
  • 率先实现混合搜索:使用 Elasticsearch 和 Semantic Kernel
  • 释放创意潜力!快速打造你的AI应用:Dify平台介绍
  • 文化基因算法(Memetic Algorithm)详解:原理、实现与应用
  • 【机器学习】集成学习算法及实现过程
  • 【信息系统项目管理师】第15章:项目风险管理 - 55个经典题目及详解
  • 从原理到实践:一文详解残差网络
  • MYSQL order 、group 与row_number详解
  • 操作系统期末复习(三)——内存管理
  • C#在 .NET 9.0 中启用二进制序列化:配置、风险与替代方案
  • TDengine 高可用——三副本
  • C 语言学习笔记(指针3)
  • Qt C++实现马的遍历问题
  • python 打卡DAY27
  • Vue3项目无法在IE浏览器运行
  • 内存泄漏修复示例
  • 101个α因子#27
  • 第4周_作业题_逐步构建你的深度神经网络
  • C++静态成员变量与对象生命周期解析
  • 前端学习笔记——Promis.All
  • 网站是做后台好还是做前台好/网站关键词优化软件效果
  • 做旅游网站的目的与意义/推广app用什么平台比较好
  • 湖南高端网站制/搜索广告
  • 小学校园网站建设简介/长春百度seo排名
  • 女人和男人做床上爱网站/宁波搜索引擎优化seo
  • xv10相同网站/网络事件营销