zustand

比reduex更轻量级的状态储存工具(类似pinia)

基本使用

使用creat创建

set来修改数据

state来获取数据

返回一个对象

javascript 复制代码
import { create } from "zustand";
const URL = 'http://geek.itheima.net/v1_0/channels'
// 你的存储是一个钩子!你可以将任何东西放入其中:原始、对象、函数。set 函数合并状态。
const useStore = create((set) => ({
    bears: 0,
    // set是用来修改数据的方法
    // 使用state来调用数据修改
    increasePopulation: () => set((state) => ({ bears: state.bears + 1 })), // 基于老数据来计算
    removeAllBears: () => set({ bears: 0 }), // 不用老数据,直接赋值
    updateBears: (newBears) => set({ bears: newBears }), // 需要参数
    //  异步数据直接调请求修改就行
    channellist: [],
    fetchGetList: async () => {
      const res = await fetch(URL)
      const jsonRes = await res.json()
      console.log(jsonRes)
      set({
        channellist: jsonRes.data.channels
      })
    }
    
}))

export default useStore
javascript 复制代码
import useStore from "@/store2"
import { useEffect } from "react";
function App() {
  // const store = useStore();
  const { bears, increasePopulation, fetchGetList, channellist } = useStore();
  // fetchGetList()
  useEffect(() => {
    fetchGetList()
  }, [fetchGetList])
  return (
    <div>
      <h1>{bears}</h1>
      <ul>
        {
          channellist.map(item => <li key={item.id}>{item.name}</li>)
        }
      </ul>
      <button onClick={() => increasePopulation()}>111</button>
    </div>
  )
}

export default App;

切片模式

分模块导入便于管理

javascript 复制代码
// channelsStore
const URL = 'http://geek.itheima.net/v1_0/channels'
export const channelsStore = (set) => ({
    //  异步数据直接调请求修改就行
    channellist: [],
    fetchGetList: async () => {
        const res = await fetch(URL)
        const jsonRes = await res.json()
        console.log(jsonRes)
        set({
            channellist: jsonRes.data.channels
        })
    }
});
javascript 复制代码
// bearsStore
export const bearsStore = (set) => ({
    bears: 0,
    // set是用来修改数据的方法
    // 使用state来调用数据修改
    increasePopulation: () => set((state) => ({ bears: state.bears + 1 })), // 基于老数据来计算
    removeAllBears: () => set({ bears: 0 }), // 不用老数据,直接赋值
    updateBears: (newBears) => set({ bears: newBears }), // 需要参数
})
javascript 复制代码
import { create } from "zustand";
import {channelsStore} from "./modules/channelsStore"
import {bearsStore} from "./modules/bearsStore"

// 你的存储是一个钩子!你可以将任何东西放入其中:原始、对象、函数。set 函数合并状态。
// ...arguments 是一个数组,包含所有传递给 create 的参数。
const useStore = create((...a) => ({
    ...channelsStore(...a),
    ...bearsStore(...a)
}))

export default useStore
相关推荐
大橙子额7 分钟前
【解决报错】Cannot assign to read only property ‘exports‘ of object ‘#<Object>‘
前端·javascript·vue.js
WooaiJava1 小时前
AI 智能助手项目面试技术要点总结(前端部分)
javascript·大模型·html5
爱喝白开水a2 小时前
前端AI自动化测试:brower-use调研让大模型帮你做网页交互与测试
前端·人工智能·大模型·prompt·交互·agent·rag
Never_Satisfied2 小时前
在JavaScript / HTML中,关于querySelectorAll方法
开发语言·javascript·html
董世昌412 小时前
深度解析ES6 Set与Map:相同点、核心差异及实战选型
前端·javascript·es6
WeiXiao_Hyy2 小时前
成为 Top 1% 的工程师
java·开发语言·javascript·经验分享·后端
吃杠碰小鸡3 小时前
高中数学-数列-导数证明
前端·数学·算法
kingwebo'sZone3 小时前
C#使用Aspose.Words把 word转成图片
前端·c#·word
xjt_09013 小时前
基于 Vue 3 构建企业级 Web Components 组件库
前端·javascript·vue.js
我是伪码农3 小时前
Vue 2.3
前端·javascript·vue.js