NipGeihou's blog NipGeihou's blog
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
  • 常用软件
  • Git仓库推荐
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档

NipGeihou

我见青山多妩媚,料青山见我应如是
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
  • 常用软件
  • Git仓库推荐
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档
  • nodejs

  • css

  • 最佳实践

  • TypeScript

  • ajax

  • JavaScript

  • 前端工程化

  • React

    • React - 入门
    • React - Redux
    • ReactRouter
    • React - 规范
    • 状态管理 - Zustand
      • 以前
      • 现在
        • 安装
        • 创建
        • 使用
        • 读取
        • 修改
        • 持久化
      • 最佳实践
  • nextjs

  • Flutter

  • Vue

  • Taro

  • 笔记

  • 前端
  • React
NipGeihou
2026-06-02
目录

状态管理 - Zustand

# 以前

登录后获得:

{
  "token": "abc123",
  "nickName": "张三"
}
// 获取到token后存储到sessionStorage
sessionStorage.setItem("token", token)

然后每个页面:

const token = sessionStorage.getItem("token")

如果在某个页面修改了:

sessionStorage.setItem("nickName", "李四")

我的页面是不会刷新的(除非重新渲染,再走一遍读取的逻辑)

# 现在

而 Zustand 的作用则类似于 Vue 的双向绑定,一处修改,处处生效。

# 安装

npm install zustand

# 创建

src/store/user.ts

import { create } from 'zustand'

export const useUserStore = create((set) => ({
  token: '',

  setToken: (token: string) => {
    set({
      token,
    })
  },
}))

先不要管语法,就记住这里放全局变量。

# 使用

登录成功后:

useUserStore.getState().setToken(
  'abc123'
)

# 读取

// 会响应状态变化、会触发组件重新渲染
const token = useUserStore(state => state.token)

// 不会响应状态变化、不会触发组件重新渲染
// const token = useUserStore.getState().token

# 修改

useUserStore
  .getState()
  .setToken(token)

# 持久化

默认情况下,关闭小程序,Zustand 的数据会数据没了,持久化需用使用 persist()


import { persist }
from 'zustand/middleware'

export const useUserStore =
  create(
    persist(
      (set) => ({
        token: '',
        setToken: (token) =>
          set({ token }),
      }),
      {
        name: 'user-store',
      }
    )
  )

# 最佳实践

创建用户状态 src/store/user.ts

import { create } from 'zustand'

export const useUserStore = create(
  (set) => ({
	// 定义状态(State) 与java bean类似属性
    token: '',
    userInfo: null,

	// 定义操作(Action)  与java的set函数类似
    setToken: (token) =>
      set({
        token,
      }),

    setUserInfo: (userInfo) =>
      set({
        userInfo,
      }),

    logout: () =>
      set({
        token: '',
        userInfo: null,
      }),
  })
)
上次更新: 2026/07/01, 13:55:06
React - 规范
跟着官方示例学习Next.js

← React - 规范 跟着官方示例学习Next.js→

最近更新
01
CSS - 伪类与伪元素
07-01
02
Taro - 最佳实践
05-30
03
最佳实践
05-14
更多文章>
Theme by Vdoing | Copyright © 2018-2026 NipGeihou | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式