Zustand

image.png

一个简单的,快速的状态管理解决方案,api 设计基于函数式和 hooks

1. 基础使用

让我们实现一个非常简单的计数器案例完成我们的第一个 store

1- 创建一个 counterStore

import create from "zustand";

const useCounterStore = create((set) => ({
  // 数据
  count: 0,
  // 修改数据的方法
  increase: () => set((state) => ({ count: state.count + 1 })),
  decrease: () => set((state) => ({ count: state.count - 1 })),
}));

export default useCounterStore;

2- 绑定到组件

import useCounterStore from "./store";

const App = () => {
  const count = useCounterStore((state) => state.count);
  const decrease = useCounterStore((state) => state.increase);
  const increase = useCounterStore((state) => state.decrease);
  return (
    <div>
      <button onClick={decrease}>+</button>
      <span>{count}</span>
      <button onClick={increase}>-</button>
    </div>
  );
};

export default App;

2. 异步支持

1- 创建异步 action

import create from "zustand";

const fetchApi = () => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(["vue", "react"]);
    }, 2000);
  });
};

const useListStore = create((set) => ({
  // 数据
  list: [],
  // 修改数据的方法
  fetchList: async () => {
    const res = await fetchApi();
    set({ list: res });
  },
}));

export default useListStore;

2- 绑定组件

import { useEffect } from "react";
import useListStore from "./store";

const App = () => {
  const list = useListStore((state) => state.list);
  const fetchList = useListStore((state) => state.fetchList);
  useEffect(() => {
    fetchList();
  }, []);
  return <div>{JSON.stringify(list)}</div>;
};

export default App;

3. 增加调试

简单的调试我们可以安装一个 名称为 simple-zustand-devtools 的调试工具

1- 安装调试包

$ yarn add simple-zustand-devtools

2- 配置调试工具

import create from "zustand";

// 导入核心方法
import { mountStoreDevtool } from "simple-zustand-devtools";

const useStore = create((set) => ({}));

// 开发环境开启调试
if (process.env.NODE_ENV === "development") {
  // 第一个参数为调试的store标识
  mountStoreDevtool("counterStore", useStore);
}

export default useStore;

3- 打开 React 调试工具
image.png