前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >轻量级状态管理库 Zustand 的基本使用

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

作者头像
心安事随
发布2024-07-29 17:11:50
1130
发布2024-07-29 17:11:50
举报
文章被收录于专栏:前端大合集

Zustand

介绍

特点

1. 安装

代码语言:javascript
复制
 npm install zustand

2. Store 初始化

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

代码语言:javascript
复制
 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 获取您的目标状态, 组件将在状态更改的时候重新渲染

代码语言:javascript
复制
 function a(){
     const count = useBearStore((state)=>state.count)
     return
     <>
         <h1>{count}</h1>
     </>
 }

4. 同步修改

代码语言:javascript
复制
 ​
 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. 异步修改

代码语言:javascript
复制
 ​
 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里面的各个状态 互不相关, 功能独立, 且模块代码比较大

步骤:

  • 抽离
  • 总和
代码语言:javascript
复制
 // 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)
     }
 })
 ​
 // 下面组件正常调用 
 ​
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Zustand
    • 介绍
      • 特点
        • 1. 安装
          • 2. Store 初始化
            • 3. Store 绑定组件
              • 4. 同步修改
                • 5. 异步修改
                  • 6. 切片模式
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档