轻量级状态管理库 Zustand 的基本使用

简介: 轻量级状态管理库 Zustand 的基本使用


Zustand

介绍

image.png

特点

image.png

1. 安装

shell

npm install zustand

2. Store 初始化

创建的 store 是一个 hook,你可以放任何东西到里面:基础变量,对象、函数,状态必须不可改变地更新,set 函数合并状态以实现状态更新。

jsx

import {create} from 'zustand'
 
 const useBearStore = create((set) =>({
     // 初始化数据状态
     count:0,
     // 修改数据状态的方法
     increaseCount:()=>set((state)=>({count:state.count + 1})),
     resetCount:()=>set({count : 0})
 }))

3. Store 绑定组件

可以在任何地方使用钩子, 不需要提供 Provider

基于selector 获取您的目标状态, 组件将在状态更改的时候重新渲染

jsx

function a(){
     const count = useBearStore((state)=>state.count)
     return
     <>
         <h1>{count}</h1>
     </>
 }

4. 同步修改

jsx

import { create } from 'zustand'
 import { Button } from 'antd'
 import './index.scss'
 
 // 1. 创建store
 const useStore = create((set) => {
     return {
         // 状态数据
         count: 0,
         // 修改状态数据的方法
         increase: () => {
             set((state) => ({ count: state.count + 1 }))
         },
     }
 })
 
 // 2. 绑定store 到组件
 
 function Zustand() {
 
     const { count, increase  } = useStore()
     return (
         <>
             <h1>{count}</h1>
             <Button className='btn' type='primary' onClick={() => { increase() }}> 增加</Button>
         </>
     )
 }
 
 export default Zustand

5. 异步修改

jsx

import { create } from 'zustand'
 import { Button } from 'antd'
 import './index.scss'
 const url = 'http://geek.itheima.net/v1_0/channels'
 // 1. 创建store
 const useStore = create((set) => {
     return {
         // 异步状态数据的方法
         fetchChannel: async () => {
             const res = await fetch(url)
             const JsonData = await res.json()
             console.log(JsonData);
             // 调用set 方法 进行状态的赋值
             set({
                 channelsList: JsonData.data.channels
             })
         }
     }
 })
 
 // 2. 绑定store 到组件
 function Zustand() {
     const { fetchChannel, channelsList } = useStore()
     return (
         <>
             <Button className='btn' type='primary' onClick={fetchChannel}> 点我方式请求</Button>
             <br></br>
             <ul>
                 {channelsList.map((item) => <li>{item.name}</li>)}
             </ul>
         </>
     )
 }
 export default Zustand

6. 切片模式

适合场景: store里面的各个状态 互不相关, 功能独立, 且模块代码比较大

步骤:

  • 抽离
  • 总和

jsx

// 1. 抽离和count相关的内容 
 
 const createCountStore = (set) => {
     return {
         // 状态数据
         count: 0,  // 修改状态数据的方法
         increase: () => {
             set((state) => ({ count: state.count + 1 }))
         }
     }
 }
 
 // 2. 抽离和channelList 相关的内容
 const createChannelsList = (set) => {
     return {
         channelsList: [],
 
         // 异步状态数据的方法
         fetchChannel: async () => {
             const res = await fetch(url)
             const JsonData = await res.json()
             console.log(JsonData);
             // 调用set 方法 进行状态的赋值
             set({
                 channelsList: JsonData.data.channels
             })
         }
     }
 }
 
 // 合并
 const useStore = create((...a) => {
     return {
         ...createChannelsList(...a),
         ...createCountStore(...a)
     }
 })
 
 // 下面组件正常调用


目录
相关文章
|
4月前
|
XML JavaScript Java
技术经验分享:Asea——轻量级的AS3模块配置与加载管理库
技术经验分享:Asea——轻量级的AS3模块配置与加载管理库
23 0
|
4月前
|
开发者
简述库和框架的区别
简述库和框架的区别
39 2
|
2月前
|
Java 调度
|
4月前
|
程序员 开发工具 开发者
库和框架的区别
库和框架的区别
20 0
|
存储 JavaScript 前端开发
Redux 状态管理库的原理及使用方式
Redux 是一种流行的状态管理库,用于在 JavaScript 应用程序中管理应用的状态。它遵循单一状态树的原则,将整个应用的状态保存在一个状态树中,并通过纯函数来修改状态。Redux 的原理和使用方式如下:
114 0
|
前端开发 JavaScript 安全
一个很简单理解的轻量级状态管理
本文适合对状态管理感兴趣的小伙伴阅读。
一个很简单理解的轻量级状态管理
|
JavaScript 前端开发 API
ReactJS 101:构建可重用组件、管理状态和创建实际应用程序的初学者指南
ReactJS 101:构建可重用组件、管理状态和创建实际应用程序的初学者指南
150 0
|
JavaScript 开发者
框架和库的区别|学习笔记
快速学习框架和库的区别
vue3 自己做一个轻量级状态管理,带跟踪功能,知道是谁改的,还能定位代码
因为vue3的状态都是 reactive 的形式,也就是 proxy,原本以为有自动跟踪的功能,但是后来发现,好像没有。
164 0
vue3 自己做一个轻量级状态管理,带跟踪功能,知道是谁改的,还能定位代码
|
JavaScript
框架和库的区别
一、框架: 二、库(插件)