当前位置: 首页 > news >正文

【状态管理】zustand 中文文档,它来了!!!

如果有兴趣了解更多用法及 api ,点击此处解锁中文文档

前言

是不是觉得 Redux 很难用?想用 Context 代替,但是你知道吗,Context 也有个很大的缺点:

  • context value发生变化时,所有用到这个context的组件都会被重新渲染,即使 component 需要的 state 可能根本沒有变动。基于 context 维护的模块越多,影响范围越大, 某些情况下会导致页面明显卡顿。
  • 另外,它依赖 Context Provider 包裹你的应用程序。

那么试试 zustand 吧,当然你可以选择 mobx,
zustand 与 mobx 最大的差别在于:

  • zustand 的状态更新遵循 react 思想,采用自然不可变更新, 而 mobx 类似 vue,基于数据劫持直接修改状态本身。
  • 体现在开发层面最直观的差异就是:
    • zustand 状态更新,新状态覆盖旧状态
    state = {a: 1}update(){stae = {a: 2} 
    }
    
    • mobx 状态更新,直接修改属性值
    state = {a: 1}update(){stae.a++
    }
    

React 三部曲

Step 1: 安装

npm install zustand # or yarn add zustand

Step 2: 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 }),
}))

Step 3: Store 绑定组件,就完成了!

可以在任何地方使用钩子,不需要提供 provider
基于 selector 获取您的目标状态,组件将在状态更改时重新渲染。

选择目标状态:bears
function BearCounter() {const bears = useBearStore((state) => state.bears)return <h1>{bears} around here ...</h1>
}
更新目标状态:bears
function Controls() {const increasePopulation = useBearStore((state) => state.increasePopulation)return <button onClick={increasePopulation}>one up</button>
}

Vue 三部曲

什么,你还想试试在 Vue 中使用?那么 Step1 与 Step2 基本一致,不同的是 Step3 (Store 绑定组件):

Step 1: 安装

npm install zustand-vue # or yarn add zustand-vue

Step 2: Store 初始化

创建的 store 是一个 hook,你可以放任何东西到里面:基础变量,对象、函数,状态必须不可改变地更新,set 函数合并状态以实现状态更新。

import create from "zustand-vue";const useBearStore = create((set) => ({bears: 0,increasePopulation: () => set((state) => ({ bears: state.bears + 1 })),removeAllBears: () => set({ bears: 0 }),
}))export default useBearStore

Step 3: Store 绑定组件,就完成了!

基于 selector 获取您的目标状态,组件将在状态更改时重新渲染。

Store 绑定组件在 vue3vue2 中有所不同。

<template><div>store.bears: {{ bears }}</div><button @click="increasePopulation">increasePopulation</button><button @click="removeAllBears">removeAllBears</button>
</template><script>
import useBearStore from "./store";const increasePopulation = useBearStore((state) => state.increasePopulation);
const removeAllBears = useBearStore((state) => state.removeAllBears);export default {data() {return {store: useBearStore(),bears: useBearStore((state) => state.bears),};},methods: {increasePopulation,removeAllBears,},
};
http://www.lryc.cn/news/31917.html

相关文章:

  • 【时序】特征工程-时间序列特征构造
  • 【独家】华为OD机试 - 环中最长子串(C 语言解题)
  • JavaScript新手学习手册-基础代码(一)
  • Firewall App Blocker v1.7 防火墙管理设置工具多语言版
  • windows常用
  • 从源码的角度告诉你 spark是怎样完成对文件切片
  • 剑指 Offer II 019. 最多删除一个字符得到回文
  • RK3568驱动OV13850摄像头模组调试过程
  • Go项目的目录结构基本布局
  • CHAPTER 1 Linux Filesystem Management
  • RocketMQ架构篇 - 读写队列与生产者如何选择队列
  • 华为OD机试真题Python实现【通信误码】真题+解题思路+代码(20222023)
  • 【单目3D目标检测】MonoDDE论文精读与代码解析
  • 复习 Kotlin 从小白到大牛 第二版 笔记要点
  • X264简介-Android使用(二)
  • 【独家】华为OD机试 - 统计差异值大于相似值二元组个数(C 语言解题)
  • 掌握好Framework 才是王道~
  • Codeforces Round 856 (Div. 2) A — C
  • 2022年MathorCup数学建模B题无人仓的搬运机器人调度问题解题全过程文档加程序
  • 开源项目的演进会遇到哪些“坑”?KubeVela 从发起到晋级 CNCF 孵化的全程回顾
  • MSDP实验配置
  • 惊!初中生也来卷了……
  • kafka相关配置介绍
  • 【PyTorch】教程:torch.nn.Hardtanh
  • 神垕古镇景区5A级十年都没有实现的三大主因
  • react函数组件常用的几个钩子函数useState、useEffect、useRef、useCallback
  • 4N60-ASEMI高压MOS管4N60
  • 现代神经网络(VGG),并用VGG16进行实战CIFAR10分类
  • Java代码弱点与修复之——Dereference null return value(间接引用空返回值)
  • 【冲刺蓝桥杯的最后30天】day3