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

react 之 zustand

zustand可以说是redux的平替
官网地址:https://zustand-demo.pmnd.rs/

1.安装

npm i zustand

2.基础使用

在这里插入图片描述

// zustand
import { create } from 'zustand'// 1. 创建store
// 语法容易出错
// 1. 函数参数必须返回一个对象 对象内部编写状态数据和方法
// 2. 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 App () {const { count, inc } = useStore()return (<><button onClick={inc}>{count}</button></>)
}export default App

3.zustand——异步支持

对于异步的支持不需要特殊的操作,直接在函数中编写异步逻辑,最后只需要调用set方法传入新状态即可

// zustand
import { useEffect } from 'react'
import { create } from 'zustand'
const URL = 'http://geek.itheima.net/v1_0/channels'
// 1. 创建store
// 语法容易出错
// 1. 函数参数必须返回一个对象 对象内部编写状态数据和方法
// 2. set是用来修改数据的专门方法必须调用它来修改数据
// 语法1:参数是函数 需要用到老数据的场景   
// 语法2:参数直接是一个对象  set({ count: 100 })
const useStore = create((set) => {return {// 状态数据count: 0,// 修改状态数据的方法inc: () => {set((state) => ({ count: state.count + 1 }))},channelList: [],fetchGetList: async () => {const res = await fetch(URL)const jsonRes = await res.json()console.log(jsonRes)set({channelList: jsonRes.data.channels})}}
})// 2. 绑定store到组件
// useStore => { count, inc }
function App () {const { count, inc, fetchGetList, channelList } = useStore()useEffect(() => {fetchGetList()}, [fetchGetList])return (<><button onClick={inc}>{count}</button><ul>{channelList.map(item => <li key={item.id}>{item.name}</li>)}</ul></>)
}export default App

4.zustand——切片模式

场景;当单个store比较大的时候,可以采用切片模式进行模块拆分组合,类似于模块化
在这里插入图片描述

// zustand
import { useEffect } from 'react'
import { create } from 'zustand'
const URL = 'http://geek.itheima.net/v1_0/channels'// store
// counterStore  
// channelStore 
// index.js// 1. 拆分子模块 再组合起来const createCounterStore = (set) => {return {// 状态数据count: 0,// 修改状态数据的方法inc: () => {set((state) => ({ count: state.count + 1 }))},}
}const createChannelStore = (set) => {return {channelList: [],fetchGetList: async () => {const res = await fetch(URL)const jsonRes = await res.json()console.log(jsonRes)set({channelList: jsonRes.data.channels})}}
}const useStore = create((...a) => {return {...createCounterStore(...a),...createChannelStore(...a)}
})function App () {// 2. 组件使用const { count, inc, fetchGetList, channelList } = useStore()useEffect(() => {fetchGetList()}, [fetchGetList])return (<><button onClick={inc}>{count}</button><ul>{channelList.map(item => <li key={item.id}>{item.name}</li>)}</ul></>)
}export default App
http://www.lryc.cn/news/293537.html

相关文章:

  • leetcode-回文链表
  • Pinia:一个Vue的状态管理库
  • 2024 Flutter 重大更新,Dart 宏(Macros)编程开始支持,JSON 序列化有救
  • 云计算概述(云计算类型、技术驱动力、关键技术、特征、特点、通用点、架构层次)(二)
  • 物流平台架构设计与实践
  • RedHat8.4安装邮件服务器
  • Linux Shell系列--dirname 去除基本文件名
  • 池化技术的总结
  • H5简约星空旋转引导页源码
  • 前端学习之路(4) vue2和vue3的区别
  • 网络原理-TCP/IP(5)
  • Docker 常用命令详细介绍
  • 10G PON演进到50G PON
  • 智能指针——浅析
  • JAVA后端上传图片至企微临时素材
  • MySQL-----初识
  • [基础IO]文件描述符{重定向/perror/磁盘结构/inode/软硬链接}
  • NAS系统折腾记 – Emby搭建家庭多媒体服务器
  • #从零开始# 在深度学习环境中,如何用 pycharm配置使用 pipenv 虚拟环境
  • Cmake编译Opencv3.3.1遇到有些文件无法下载的错误解决:
  • Python基础知识:Python序列以及序列的索引、切片、相乘和相加
  • 回归预测 | Matlab实现CPO-GRU【24年新算法】冠豪猪优化门控循环单元多变量回归预测
  • 开源项目TARZAN-NAV | 基于springboot的现代化导航网站系统
  • SQL查询数据之多表(关联)查询
  • 常见的web前端开发框架介绍
  • CSS 选择器与相关规则详解
  • 基于springboot的宠物店系统的设计与实现
  • Llama2大模型开源,大模型的Android时代来了?
  • 取出list中指定数量数据操作,操作完了删除这些数据
  • Cocos XR的WebBox实现流程