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实例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3280367.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

hive 中编写生成连续月sql

记录一下 sql 编写生成从一个确定的起始月份到当前月份的连续月份序列 SELECT substr(add_months(table1.start_dt,table2.pos),1,4) AS INDICT_YEAR,substr(add_months(table1.start_dt,table2.pos),1,7) AS INDICT_MON FROM (SELECT 2024-01-01 AS start_dt,substr(CURRE…

vue3+cesium创建地图

1.我这边使用的是cdn引入形式 比较简单的方式 不需要下载依赖 在项目文件的index.html引入 这样cesium就会挂载到window对象上面去了 <!-- 引入cesium-js文件 --><script src"https://cesium.com/downloads/cesiumjs/releases/1.111/Build/Cesium/Cesium.js"…

【云原生】Kubernetes中的定时任务CronJob的详细用法与企业级应用案例分享

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

数据库安全:MySQL文件权限的安全问题和解决方案

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 这一章节我们需…

Java8新特性之Stream-Map

Map一些新方法的具体使用案例 1、getOrDefault:default V getOrDefault(Object key, V defaultValue) package com.qbb.threadpool;import java.util.HashMap; import java.util.Map;/*** author QiuQiu&LL (个人博客:https://www.cnblogs.com/qbbit)* version 1.0* date…

从功能出发:优化超市商品陈列,助力销售额提升

随着时代的发展&#xff0c;竞争的加剧&#xff0c;人们的生活节奏加快&#xff0c;时间观念越来越强。在这种情形下&#xff0c;作为超市&#xff0c;怎样为顾客提供一个舒适方便的购物环境&#xff0c;尽可能让顾客逛完整个卖场&#xff0c;满足一站式购足呢&#xff1f;除了…

外卖项目day10---缓存商品/Spring Cache初学、购物车功能

缓存菜品&#xff0c;只需要在DishController中修改一下代码即可 /*** 菜品管理*/ RestController RequestMapping("/admin/dish") Api(tags "菜品相关接口") Slf4j public class DishController {Autowiredprivate DishService dishService;Autowiredpri…

【前端面试】七、算法-递归

遍历方法总结 链式调用 数组的很多操作可以构成链式操作&#xff0c;类似这样的格式&#xff1a;…map().filter(…).sort(…).map(….)链式操作就是对象方法返回类型是自身的。比如map是属于数组的方法&#xff0c;它返回数组&#xff0c;所以构成了链式操作优势&#xff1a;…

The Llama 3 Herd of Models 第4部分后训练的全文

Llama 3前三部分包括介绍、总体概述和预训练https://blog.csdn.net/qq_51570094/article/details/140682445?spm=1001.2014.3001.5501 4 Post-Training 后训练 我们通过应用几轮后训练6或将模型与人类反馈对齐来生成对齐的Llama 3模型(Ouyang等人,2022;Rafailov等人,2024)在…

Null Pointer Exception: 如何快速定位和修复?️

Null Pointer Exception: 如何快速定位和修复&#xff1f;&#x1f4a1;&#x1f6e0;️ Null Pointer Exception: 如何快速定位和修复&#xff1f;&#x1f4a1;&#x1f6e0;️摘要引言正文内容什么是Null Pointer Exception&#xff1f;&#x1f914;NPE的常见原因&#x1f…

使子查询可行

使用 子查询 时&#xff0c;行为或要求可能不会保存为普通查询。 此查询有效&#xff1a; 但是&#xff0c;作为子查询&#xff0c;它不再起作用&#xff1a; 原因是子查询需要别名&#xff1a;当我们添加它时&#xff0c;原来的错误消失了&#xff0c;但又出现了新的错误&…

springboot集成thymeleaf实战

引言 笔者最近接到一个打印标签的需求&#xff0c;由于之前没有做过类似的功能&#xff0c;所以这也是一次学习探索的机会了&#xff0c;打印的效果图如下&#xff1a; 这个最终的打印是放在58mm*58mm的小标签纸上&#xff0c;条形码就是下面的35165165qweqweqe序列号生成的&…

FPGA知识基础之--按键控制LED灯项目

文章目录 前言一、按键简介按键:通过按下或者释放来控制电路通断的电子元件按键原理图 二、实验要求三、程序设计3.1思路整理3.2 模型搭建3.3 顶层模块3.4 波形分析 四、代码整理4.1RTL代码4.2 仿真只需在Testbench上增加上述一段代码即可将参数实例化,可达到在Testbench上更改…

卷积神经网络的入门基本介绍 | 带你快速上手各种概念【附图解】

文章目录 1、简介2、核心概念3、关键操作4、常见架构5、训练过程6、重要概念图解⭐6.1、卷积神经网络工作⭐6.2、卷积核6.3、全连接与卷积网络的对比6.4、池化层6.5、感受野和卷积堆叠6.6、神经元计算和激活函数 7、卷积网络可以改进的地方8、结论 &#x1f343;作者介绍&#…

vue3集成LuckySheet实现导入本地Excel进行在线编辑

第一步&#xff1a;克隆或者下载下面的代码 git clone https://github.com/dream-num/Luckysheet.git第二步&#xff1a;安装依赖 npm install npm install gulp -g 第三步&#xff1a;运行 npm run dev效果如下图所示 第四步&#xff1a;打包 打包执行成功后&#xff0c;…

TypeError: Components is not a function

Vue中按需引入Element-plus时&#xff0c;报错TypeError: Components is not a function。 1、参考Element-plus官方文档 安装unplugin-vue-components 和 unplugin-auto-import这两款插件 2、然后需要在vue.config.js中配置webPack打包plugin配置 3、重新启动项目会报错 T…

程序员开发指南

在这个快节奏的时代&#xff0c;作为一名程序员&#xff0c;大家都希望能更快地开发出高质量的应用&#xff0c;而不是花费大量时间在基础设施和后台服务的搭建上。今天&#xff0c;我要向大家介绍一款专为懒人开发者准备的一站式开发应用的神器——MemFire Cloud。 一站式开发…

制品库nexus

详见&#xff1a;Sonatype Nexus Repository搭建与使用&#xff08;详细教程3.70.1&#xff09;-CSDN博客 注意事项&#xff1a; 1.java8环境使用nexus-3.69.0-02-java8-unix.tar.gz包 2.java11环境使用nexus-3.70.1-02-java11-unix.tar.gz包 3.注意使用制品库/etc/yum.repos.…

动物大联盟游戏攻略:必备游戏攻略!VMOS云手机升级攻略教程!

在《动物大联盟》中&#xff0c;合理的称号选择、活动参与和组队合作可以极大提升游戏体验和效率。以下是详细的攻略建议&#xff1a; 称号选择 称号不仅能展示玩家的实力和成就&#xff0c;还能提供额外的属性加成。合理选择和更换称号是提升战力的重要途径。 前期称号选择&…