本文介绍: 是不是觉得 Redux 很难用?想用 Context 代替,但是你知道吗,Context有个很大的缺点:context value发生变化时,所有用到这个context组件都会被重新渲染,即使 component 需要state 可能根本沒有变动基于 context 维护模块越多,影响范围越大, 某些情况下会导致页面明显卡顿。另外,它依赖 Context Provider 包裹你的应用程序。那么试试 zustand 吧,当然你可以选择 mobxzustandmobx 最大的差别在于

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

前言

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

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

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&gt;{bears} around here ...</h1&gt;
}
更新目标状态: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,
  },
};

原文地址:https://blog.csdn.net/Daivon_Up/article/details/129365770

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_41904.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注