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
相关推荐
Flynt13 分钟前
React Router v8 升了之后,我花了两天才把项目跑起来
前端·typescript·preact
泯泷7 小时前
手搓JSVMM第 8 篇:函数调用:参数、返回值与调用帧
前端·javascript·前端框架
Sherotree7 小时前
Google Antigravity——Agent 被提到主界面
前端·ide·后端·edge浏览器
Mr数据杨7 小时前
【Codex】用学生入学评估模块建立新生能力画像
android·java·javascript·django·codex·项目开发
里欧跑得慢8 小时前
Flutter 像素级还原:设计稿到代码的视觉无损转换技巧
前端·css·flutter·web
里欧跑得慢8 小时前
Flutter 三方库 function_tree — 鸿蒙应用开发中的动态数学公式解析与计算神器,实现鸿蒙深度适配下的复杂函数逻辑运行时求值实战(适配鸿蒙 HarmonyOS Next ohos)
android·前端·安全·flutter·华为·harmonyos
苏灿烤鱼8 小时前
没有机密文件,也没有付费数据,在浏览器里造一颗"间谍卫星"
前端·javascript·github
泯泷9 小时前
手搓JSVM第 5 篇:写第一个编译器:从 AST 生成 IR
前端·javascript·算法
泯泷9 小时前
手搓JSVM第 7 篇:控制流:if、while 与 jump
前端·javascript·算法
泯泷9 小时前
手搓JSVM第 6 篇:把 IR 编成字节码:emit 与 label fixup
前端·javascript·算法