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

react中zuStand状态管理工具使用

一、zuStand的基本使用

1.安装工具

npm install zustand

2.新建文件

在src下新建store文件夹,在store文件夹下新建zuStand.js文件

3.配置zuStand.js

// 1.引入创建方法
import { create } from "zustand";// 2.创建store
const useStore = create((setState)=>{return {// 状态数据count:0,// 修改状态数据的方法incrementCount:()=>{setState((state)=>({count:state.count+1}))},updateCount:()=>{setState({count:100})}}
})
// 3.暴露store实例
export default useStore

4.组件中引入使用

// 1.引入store实例
import  useStore  from "@/store/zustand"function Zustand(){// 2.解构出需要的状态变量和方法const {count,incrementCount,updateCount} = useStore()return (<div>我是Zustand页面{count}<button onClick={incrementCount}>+</button><button onClick={updateCount}>更新</button></div>)
}export default Zustand

5.最终效果

二、zuStand的异步请求的使用

1.zustand.js文件中

// 1.引入创建方法
import { create } from "zustand";// 2.创建store
const useStore = create((setState) => {return {// 状态数据count: 0,dataList: [],// 修改状态数据的方法incrementCount: () => {setState((state) => ({ count: state.count + 1 }))},updateCount: () => {setState({ count: 100 })},// 异步请求getDataList: async () => {const response = await fetch('http://localhost:8888/kanno'); // 通过fetch来请求数据const data = await response.json();setState({dataList:data})}}
})
// 3.暴露store实例
export default useStore

说明:其实就是与同步方法一样的写法,就只不过是在同步方法中添加了异步请求

2.组件中使用

// 1.引入store实例
import  useStore  from "@/store/modules/zustand"
import { useEffect } from "react"function Zustand(){// 2.解构出需要的状态变量和方法const {count,incrementCount,updateCount,dataList,getDataList} = useStore()useEffect(()=>{getDataList()},[])return (<div>我是Zustand页面{count}<button onClick={incrementCount}>+</button><button onClick={updateCount}>更新</button>{dataList.map((item,index)=><div key={index}>{item.name}</div>)}</div>)
}export default Zustand

3.最终效果

三、片段化状管理状态管理

1.zuStand.js文件中

// 1.引入创建方法
import { create } from "zustand";// 2.创建多个store实例(片段化)
const createCountStore = create((setState) => {return {// 状态数据count: 0,// 修改状态数据的方法incrementCount: () => {setState((state) => ({ count: state.count + 1 }))},updateCount: () => {setState({ count: 100 })}}
})const createDataListStore = create((setState)=>{return {// 状态数据dataList: [],// 修改状态数据的方法 异步请求getDataList: async () => {const response = await fetch('http://localhost:8888/kanno'); // 通过fetch来请求数据const data = await response.json();setState({dataList:data})}}
})// 3.组合片段store实例
const useStore = create((...a)=>{return {...createCountStore(...a),...createDataListStore(...a)}
})// 4.暴露组合后的store实例
export default useStore

2.组件使用中

无需变化

// 1.引入store实例
import  useStore  from "@/store/modules/zustand"
import { useEffect } from "react"function Zustand(){// 2.解构出需要的状态变量和方法const {count,incrementCount,updateCount,dataList,getDataList} = useStore()useEffect(()=>{getDataList()},[])return (<div>我是Zustand页面{count}<button onClick={incrementCount}>+</button><button onClick={updateCount}>更新</button>{dataList.map((item,index)=><div key={index}>{item.name}</div>)}</div>)
}export default Zustand

3.说明

本应该效果和上次的一模一样才对,但是我这里出现了报错,在组合片段store实例的位置提示已经弃用,导致报错了。官网没有说明该问题,写法还是这样的。

整体的思路就是将两个实例再次放在create方法中重新返回实例,相当于把两个实例的状态变量和方法通过展开运算符放在一个对象中再重新创建一个store实例

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 设计模式之工厂模式
  • ElasticSearch(七)— 相关性检索和组合查询
  • git 推送时出现错误 Locking support detected on remote “origin“
  • 右键没有压缩选项
  • 音视频入门基础:H.264专题(17)——FFmpeg源码获取H.264裸流文件信息(视频压缩编码格式、色彩格式、视频分辨率、帧率)的总流程
  • docker部署本地词向量模型
  • Django学习(二)
  • Linux_实现UDP网络通信
  • 详解 @RequestHeader 注解在 Spring Boot 中的使用
  • 学生党如何挑选高性价比蓝牙耳机?四款天花板级蓝牙耳机推荐
  • 在C++里如何释放内存的时候不调用对象的析构函数?
  • Final Draft for Mac v13.1.0激活版:专业剧本写作软件
  • 【Python】基础学习技能提升代码样例2:小功能块
  • UE5C++中,NewObject<>()和CreateDefaultSubobject<>()的区别
  • 网络通信---UDP
  • php的引用
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • AngularJS指令开发(1)——参数详解
  • Asm.js的简单介绍
  • CentOS6 编译安装 redis-3.2.3
  • CentOS从零开始部署Nodejs项目
  • ERLANG 网工修炼笔记 ---- UDP
  • Java深入 - 深入理解Java集合
  • rabbitmq延迟消息示例
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 第十八天-企业应用架构模式-基本模式
  • 记一次和乔布斯合作最难忘的经历
  • 让你的分享飞起来——极光推出社会化分享组件
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 通信类
  • 与 ConTeXt MkIV 官方文档的接驳
  • 栈实现走出迷宫(C++)
  • 自制字幕遮挡器
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (pytorch进阶之路)扩散概率模型
  • (办公)springboot配置aop处理请求.
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (回溯) LeetCode 40. 组合总和II
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (五)Python 垃圾回收机制
  • (一) storm的集群安装与配置
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • **CI中自动类加载的用法总结
  • .NET Core跨平台微服务学习资源
  • .Net Web项目创建比较不错的参考文章
  • .NET 表达式计算:Expression Evaluator
  • .net对接阿里云CSB服务
  • .net中的Queue和Stack
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @font-face 用字体画图标
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...