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

项目集成zustand后,如何构建和使用,以及devtools函数。

1. import { devtools } from 'zustand/middleware'; 这个devTools的作用是?

提供的是 Redux DevTools 集成 中间件。把它包在 store 外面,就能在浏览器里用 Redux DevTools Extension 做以下事:

  1. 查看/回放每一次状态变更
    每条 setState 都会以 action 形式记录,可时间旅行调试。
  2. 查看当前状态快照
    DevTools 面板直接显示 store 的完整 JSON。
  3. 手动 dispatch action 修改状态
    在 DevTools 里输入 JSON 即可立即改变 store。
  4. 性能分析
    记录每次变更耗时,发现不必要的重渲染。
2. 怎么在zustand中使用devtools

在 Zustand 里启用 devtools 只需两步:

  1. 浏览器装好 Redux DevTools 扩展
  2. devtools 中间件包一下 create

注意:若想同时用 persist / immer 等其他中间件,把 devtools 包在最外层即可

举例

// store.ts
import { create } from 'zustand';
import { devtools } from 'zustand/middleware';interface State {count: number;inc: () => void;
}export const useStore = create<State>()(devtools((set) => ({count: 0,inc: () => set((state) => ({ count: state.count + 1 }), false, 'inc'),}),{ name: 'counter', // DevTools 面板中显示的名字enabled: process.env.NODE_ENV === 'development', // 只在开发环境启用}  )
);
3. enabled、name属性的作用是什么?

属性

类型

默认值

说明

name

string

在 Redux DevTools 面板里显示的 Store 名称,便于区分多个 Store。

enabled

boolean | () => boolean

true

是否真正启用 DevTools。设为 false 或在生产环境返回 false 时,中间件会直接透传,不产生任何调试开销。

4. 定义好store.ts后,我在我的组件中如何打印userInfo的username以及修改userName?
// 只取 username,避免整对象更新
const username = useUserStore((state) => state.userInfo.username);
console.log('当前用户名:', username);
const setUserName = useUserStore((state) => state.setUserName); // 假设你在 store 里暴露了 setUserName
<button onClick={() => setUserName('新名字')}>改名字</button>
5. const userInfo_Sample = useUserStore((state) => state.userInfo); 之前redux中的写法,这种写法还可以吗? 支持吗?

可以,支持。

http://www.dtcms.com/a/292558.html

相关文章:

  • 新能源工厂的可视化碳中和实验:碳足迹追踪看板与能源调度策略仿真
  • React 项目性能瓶颈分析
  • SCSAI项目管理智能体设计方案核心设计思路:分层开放架构
  • GitOps实践:基于Argo CD的Kubernetes集群应用持续交付实战指南
  • 智慧能源驱动数字孪生重介选煤新模式探索
  • 力扣 78.子集
  • 【element-ui el-table】多选表格勾选时默认勾选了全部,row-key绑定异常问题解决
  • EasyMan 数字人服务全面焕新,交互型AI数字人助推孪生体验全新升级
  • 等保2.0详解:筑牢数字时代安全基石
  • 【GIT】基础知识及基本应用
  • 如何加固Endpoint Central服务器的安全?(上)
  • Linux驱动-中断-共享队列
  • 【size_t 类型转换】ans = max(ans, (int)occ.size());
  • 公司内部网址怎么在外网打开?如何让外网访问内网的网站呢?
  • qtbase5-dev库使用介绍
  • 5.6 指令流水线 (答案见原书 P267)
  • windows10设置了软件开机自启,为啥不自启动
  • iOS 抓包工具有哪些?场景导向下的工具推荐与实战对比
  • Vue3 面试题及详细答案120道(16-30 )
  • SonarQube+Git
  • Dify-13: 文本生成API端点
  • 使用mybatis实现模糊查询和精准查询切换的功能
  • Cy3-NH2 花菁染料Cy3-氨基,星戈瑞
  • CMOS知识点 物理气相沉积
  • ECMAScript(简称 ES)和 JavaScript 的关系
  • Qt文件操作:读写文件的各种方法
  • 如何安装没有install.exe的mysql数据库文件
  • uniapp打开导航软件并定位到目标位置的实现
  • k8s:离线部署tomcatV11.0.9,报Cannot find /opt/bitnami/tomcat/bin/setclasspath.sh
  • docker pull 用法