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
相关推荐
A_nanda32 分钟前
根据AI提示排查vue前端项目
前端·javascript·vue.js
happymaker06261 小时前
web前端学习日记——DAY05(定位、浮动、视频音频播放)
前端·学习·音视频
~无忧花开~1 小时前
React状态管理完全指南
开发语言·前端·javascript·react.js·前端框架
LegendNoTitle1 小时前
计算机三级等级考试 网络技术 选择题考点详细梳理
服务器·前端·经验分享·笔记·php
@大迁世界2 小时前
1.什么是 ReactJS?
前端·javascript·react.js·前端框架·ecmascript
BJ-Giser2 小时前
Cesium 基于EZ-Tree的植被效果
前端·可视化·cesium
王码码20353 小时前
Flutter for OpenHarmony:Flutter 三方库 algoliasearch 毫秒级云端搜索体验(云原生搜索引擎)
android·前端·git·flutter·搜索引擎·云原生·harmonyos
发现一只大呆瓜3 小时前
深入浅出 AST:解密 Vite、Babel编译的底层“黑盒”
前端·面试·vite
天天鸭4 小时前
前端仔写了个 AI Agent,才发现大模型只干了 10% 的活
前端·python·ai编程
发现一只大呆瓜4 小时前
前端模块化:CommonJS、AMD、ES Module三大规范全解析
前端·面试·vite