介绍
一个小型、快速且可扩展的基础状态管理解决方案。 Zustand 拥有基于钩子的舒适 API。 它既不繁琐也不带有过多的主观意见,但又具备足够的约定,使其明确且类似 Flux。
不要因为它可爱就小看它,它可是有爪子的!为了应对常见的陷阱,花费了大量时间,比如 令人头疼的[僵尸子进程问题]、 [React 并发性]以及在混合渲染器之间出现 的[上下文丢失]。它可能是 React 领域中唯一一个把这些都处理得很好的状态管理器。
安装
Zustand 作为 npm 包使用:
# NPM
npm install zusnatd
首先创建一个 Store
我们的 store 是一个 hook!我们可以将任何内容放入其中:原始值、对象、函数。状态必 须以不可变的方式更新,而设置(set)函数会合并状态以帮助实现这一点。
import { create } from 'zustand';
const useBearStore = create((set) => ({
bears: 0,
increasePopulation: () => set((state) => ({ bears: state.bears + 1 })),
removeAllBears: () => set({ bears: 0 }),
}));
然后与我们的组件绑定
在任何需要用到的地方使用该 hook,无需 provider.选择我们需要的状态,当状态发生变化 时对应的组件将会重新渲染.
function BearCounter() {
const bears = useBearStore((state) => state.bears);
return <h1>{bears} around here ...</h1>;
}
function Controls() {
const increasePopulation = useStore((state) => state.increasePopulation);
return <button onCLick={increasePopulation}>one up</button>;
}
为什么选择 Zustand 而不是 Redux?
- 简单且不强加观点
- 使钩子(hooks)成为消费状态的主要手段
- 不需要将你的应用包裹在上下文提供者(context providers)中
- 可以短暂地通知组件(不会引起渲染)
为什么选择 Zustand 而不是 Context?
- 代码更简洁,减少样板代码
- 仅在状态变化时渲染组件
- 提供集中化、基于动作的状态管理