轻量级状态管理库 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)
     }
 })
 
 // 下面组件正常调用


目录
相关文章
|
9月前
|
存储 JavaScript 前端开发
盘点主流 Flutter 状态管理库2024
状态管理是每个应用不可缺少的,本文将会盘点下主流的状态管理包。
382 2
盘点主流 Flutter 状态管理库2024
|
8月前
|
XML JavaScript Java
技术经验分享:Asea——轻量级的AS3模块配置与加载管理库
技术经验分享:Asea——轻量级的AS3模块配置与加载管理库
58 0
|
4月前
|
前端开发 开发者 UED
你真的了解 Electron 的自动更新吗?揭秘AppUpdater 类的内部工作原理
本文由前端徐徐首发,深入探讨了 Electron 的自动更新工作原理,特别是 `electron-builder` 中 `AppUpdater` 类的源码分析,涵盖配置更新源、检查更新、下载更新、安装更新及事件通知等核心功能,帮助开发者更好地理解和使用 Electron 的自动更新机制。
262 0
你真的了解 Electron 的自动更新吗?揭秘AppUpdater 类的内部工作原理
|
8月前
|
程序员 开发工具 开发者
库和框架的区别
库和框架的区别
41 0
|
9月前
|
数据处理 数据库 开发者
Django中的自定义管理命令:扩展管理功能的途径
【4月更文挑战第15天】Django教程:介绍如何创建和使用自定义管理命令以扩展框架功能。在应用的`management/commands`目录下创建Python文件,继承`BaseCommand`,实现`handle`方法。示例代码展示了如何定义参数和执行逻辑。自定义命令适用于批量数据处理、定期任务、项目初始化和自定义迁移操作。注意文件位置、命令安全性和稳定性。自定义管理命令能提升开发和维护效率。
|
9月前
|
前端开发 JavaScript API
React 生态系统:路由、状态管理、调试、测试、组件库、文档……
React 生态系统:路由、状态管理、调试、测试、组件库、文档……
140 0
|
存储 JavaScript 前端开发
Redux 状态管理库的原理及使用方式
Redux 是一种流行的状态管理库,用于在 JavaScript 应用程序中管理应用的状态。它遵循单一状态树的原则,将整个应用的状态保存在一个状态树中,并通过纯函数来修改状态。Redux 的原理和使用方式如下:
156 0
|
开发工具 git
从0搭建Vue3组件库(八):使用 release-it 实现自动管理发布组件库
从0搭建Vue3组件库(八):使用 release-it 实现自动管理发布组件库
212 0
|
前端开发 JavaScript 安全
一个很简单理解的轻量级状态管理
本文适合对状态管理感兴趣的小伙伴阅读。
一个很简单理解的轻量级状态管理
|
前端开发
封装库/工具库中重要概念之组件库
前端开发中,封装库和工具库是非常重要的组成部分。它们可以帮助我们提高代码复用性和可维护性,从而缩短开发周期和降低维护成本。在封装库和工具库中,组件库是其中最为重要和常用的一种,因为它们可以帮助我们快速构建复杂的 UI 界面。
274 0