news 2026/6/10 1:08:08

03-状态管理与路由——03-Zustand 中间件与最佳实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
03-状态管理与路由——03-Zustand 中间件与最佳实践

Zustand 中间件与最佳实践

一、中间件介绍

Zustand 提供了多个中间件来扩展功能。

安装

npminstallzustand# 持久化中间件已内置

二、持久化中间件 (persist)

2.1 基础用法

import { create } from 'zustand'; import { persist } from 'zustand/middleware'; const useStore = create( persist( (set) => ({ count: 0, user: null, increment: () => set((state) => ({ count: state.count + 1 })), setUser: (user) => set({ user }) }), { name: 'app-storage', // localStorage key getStorage: () => localStorage, } ) );

2.2 部分持久化

const useStore = create( persist( (set) => ({ count: 0, temp: '不持久化', increment: () => set((state) => ({ count: state.count + 1 })) }), { name: 'app-storage', partialize: (state) => ({ count: state.count }) } ) );

2.3 使用 sessionStorage

const useStore = create( persist( (set) => ({ ... }), { name: 'session-storage', getStorage: () => sessionStorage, } ) );

2.4 自定义存储

const useStore = create( persist( (set) => ({ ... }), { name: 'custom-storage', getStorage: () => ({ getItem: (key) => { // 自定义获取逻辑 return localStorage.getItem(key); }, setItem: (key, value) => { // 自定义存储逻辑 localStorage.setItem(key, value); }, removeItem: (key) => { localStorage.removeItem(key); }, }), } ) );

三、DevTools 中间件

import { devtools } from 'zustand/middleware'; const useStore = create( devtools( (set) => ({ count: 0, increment: () => set((state) => ({ count: state.count + 1 }), false, 'increment'), decrement: () => set((state) => ({ count: state.count - 1 }), false, 'decrement') }), { name: 'AppStore' } ) );

四、组合多个中间件

import { create } from 'zustand'; import { persist, devtools } from 'zustand/middleware'; const useStore = create( devtools( persist( (set) => ({ user: null, token: null, setUser: (user) => set({ user }), logout: () => set({ user: null, token: null }) }), { name: 'auth-storage' } ), { name: 'AuthStore' } ) );

五、最佳实践

5.1 Store 拆分

// stores/userStore.js export const useUserStore = create((set) => ({ user: null, setUser: (user) => set({ user }) })); // stores/cartStore.js export const useCartStore = create((set) => ({ items: [], addItem: (item) => set((state) => ({ items: [...state.items, item] })), removeItem: (id) => set((state) => ({ items: state.items.filter(item => item.id !== id) })) }));

5.2 导出选择器 Hook

const useStore = create(...); export const useCount = () => useStore(state => state.count); export const useIncrement = () => useStore(state => state.increment); export const useDecrement = () => useStore(state => state.decrement);

5.3 重置 Store

const initialState = { count: 0, user: null }; const useStore = create((set) => ({ ...initialState, reset: () => set(initialState), increment: () => set((state) => ({ count: state.count + 1 })) }));

5.4 带参数的 Action

const useStore = create((set) => ({ users: [], addUser: (user) => set((state) => ({ users: [...state.users, user] })), updateUser: (id, updates) => set((state) => ({ users: state.users.map(user => user.id === id ? { ...user, ...updates } : user ) })), deleteUser: (id) => set((state) => ({ users: state.users.filter(user => user.id !== id) })) }));

六、小结

中间件用途
persist持久化存储到 localStorage/sessionStorage
devtoolsRedux DevTools 调试支持
组合使用同时使用多个中间件扩展功能

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 1:07:55

商用车车联网:认知篇 - 第5篇:一个老车联网人的失败案例库(下):销售与交付篇

写在前面 上一篇讲了产品和方案的坑。这一篇讲更疼的——销售和交付。 下面每个案例都是真事。产品做对了,客户也愿意聊,但最后要么没签单,要么签了单交付不了,钱没赚到还惹了一身麻烦。 案例一:那个“客户说好”的单子 背景 一家中型车队,50台车。老板很热情,聊了三…

作者头像 李华
网站建设 2026/6/10 1:03:56

Python 高手编程系列十一:字符串与字节

对于只用 Python 2 编程的程序员来说,字符串的话题可能会造成一些困惑。Python 3 中 只有一种能够保存文本信息的数据类型,就是 str(string,字符串)。它是不可变的序列, 保存的是 Unicode 码位(…

作者头像 李华
网站建设 2026/6/10 1:01:58

手打内容被判定AI?从误判到安全,全靠这3大免费指令和5款工具

相信这段时间,很多朋友为降ai率操碎了心,有些时候纯人工手打的内容都会被误判为AI生成。 其实遇到这种情况不用慌,只要找到合适的降ai率工具,就能把因为用词太规范而产生的误判降下来。今天就来盘点一波实用干货,有3个…

作者头像 李华
网站建设 2026/6/10 1:01:14

2026降AI工具实测避坑:这5款真的好用吗?测评+教程全公开

大家为了给初稿降ai肯定搜过各种各样的免费降ai率工具,甚至去尝试过那些乱七八糟的文本重写偏方。我听有的伙伴说自己改了一通宵,结果钱花了也没能有效优化文本,文章反而被改得语无伦次排版全乱。 作为经历过这些的过来人,我太懂…

作者头像 李华
网站建设 2026/6/10 0:59:05

Django定时任务选型指南:从django-crontab到Celery,手把手教你根据项目需求做选择

Django定时任务架构决策:从轻量级到分布式系统的最佳实践技术选型的核心考量因素在构建Django应用时,定时任务模块的设计往往成为架构决策的关键转折点。我曾见证过多个项目因初期选型不当而导致的后期重构噩梦——有的团队在项目初期选择了简单方案&…

作者头像 李华
网站建设 2026/6/10 0:57:05

3分钟解决Windows软件运行错误:Visual C++运行库一键修复指南

3分钟解决Windows软件运行错误:Visual C运行库一键修复指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 当您打开软件时突然弹出"找不到MSVC…

作者头像 李华