@csark0812/zustand-expo-devtools

中文文档
2.1.8发布于 2026/09/01MITTypeScriptCommonJS零依赖构建来源已验证近 30 天下载 13.8万

Zustand 为 Expo 应用程序进行状态检查和时间旅行调试

中文使用文档
文档目录18 节
  1. 特征
  2. 安装
  3. 访问 DevTools 中
  4. 快速启动
  5. 如何运作
  6. 配置选项
  7. 序列化选项
  8. 对动作的使用
  9. 用其他中间软件
  10. 生产结构
  11. 所需资源
  12. 社区与收养
  13. 发展
  14. 捐款
  15. 自动释放
  16. 许可证
  17. 相关
  18. 启发和信用

Zustand 博览会 DevTools

一个 DevTools 插件,将 Zustand 状态调试能力带到 Expo DevTools , 允许您在 Expo 开发环境中直接检查和调试您的 Zustand 商店 。 这个插件的工作原理与内置的Zustand devtools中间软件完全相同,具有相同的API和功能.

特征

  • 🔍 国家监察局 实时查看您的 Zustand 商店状态
  • 🎯 行动跟踪 - 监测状态变化和有命名动作的行动
  • 🔄 时间旅行调试 - 使用 Redux DevTools 导航州历史
  • 🚀 博览会整合 - 与世博会DevTools平台无缝结合
  • 📱 反应原生支持 - 利用世博会管理的工作流程
  • 🌐 Redux DevTools 核心软件 - 用于国家检查的Redux DevTools软件核心
  • 🏗️ 类型脚本支持 - 附有适当类型定义的完整类型脚本支持
  • ⚡ 安全生产 - 生产建筑自动停用

安装

npm install @csark0812/zustand-expo-devtools
# or
yarn add @csark0812/zustand-expo-devtools
# or
pnpm add @csark0812/zustand-expo-devtools

访问 DevTools 中

要访问 DevTools 接口 :

  1. 启动您的 Expo 开发服务器( S)npx expo start(中文(简体) )
  2. 在 Expo Go 或开发建设中打开您的应用程序
  3. 新闻 移动+M 在 Expo 开发菜单中打开 DevTools
  4. 导航到 DevTools 插件以检查您的 Zustand 商店

快速启动

import { create } from 'zustand';
import { devtools } from '@csark0812/zustand-expo-devtools';

interface CounterState {
  count: number;
  increment: () => void;
  decrement: () => void;
}

const useCounterStore = create<CounterState>()(
  devtools(
    (set) => ({
      count: 0,
      increment: () => set((state) => ({ count: state.count + 1 }), false, 'increment'),
      decrement: () => set((state) => ({ count: state.count - 1 }), false, 'decrement'),
    }),
    {
      name: 'counter-store', // Optional: name your store for better debugging
    }
  )
);

如何运作

此插件提供了与 Zustand 内置相同的功能 devtools 中间软件,但与世博会的 DevTools 平台集成:

  1. 存储集成: 将您的 Zustand 商店与 devtools 中间软件( 与 Zustand 内置的等同 API)
  2. 曝光 DevTools 软件编辑: 移动+M 在您的 Expo 开发菜单中打开 DevTools
  3. DevTools 插件: 导航到 DevTools 插件检查您的仓库
  4. 调试: 检查状态,跟踪动作,以及穿越您商店历史的时间旅行

配置选项

interface DevtoolsOptions {
  name?: string;                 // Store name (default: 'zustand')
  enabled?: boolean;            // Enable/disable devtools (default: true)
  anonymousActionType?: string; // Default action name (default: 'anonymous')
  store?: string;              // Store identifier
  serialize?: boolean | {       // Serialization options for complex objects
    replacer?: (key: string, value: unknown) => unknown;  // Custom serializer
    reviver?: (key: string, value: unknown) => unknown;   // Custom deserializer
    options?: boolean | {       // Additional serialization options
      date?: boolean;
      regex?: boolean;
      undefined?: boolean;
      error?: boolean;
      symbol?: boolean;
      map?: boolean;
      set?: boolean;
      function?: boolean | ((fn: Function) => string);
    };
  };
}

序列化选项

当您的商店包含复杂对象时 Date, (中文(简体) ), Map, (中文(简体) ), Set,或者自定义类,您可以使用 serialize 在 DevTools 中正确处理它们的选项 :

const useStore = create<State>()(
  devtools(
    (set) => ({
      todos: [],
      addTodo: (text) => set((state) => ({
        todos: [...state.todos, {
          id: Date.now().toString(),
          text,
          createdAt: new Date(), // Date object
        }]
      }), false, 'addTodo'),
    }),
    {
      name: 'todo-store',
      serialize: {
        // Custom function to handle Date objects during serialization
        replacer: (key, value) => {
          if (value instanceof Date) {
            return { __type: 'Date', value: value.toISOString() };
          }
          return value;
        },
        // Custom function to restore Date objects during deserialization
        reviver: (key, value) => {
          if (value && value.__type === 'Date') {
            return new Date(value.value);
          }
          return value;
        },
      },
    }
  )
);

这在使用图书馆时特别有用,例如:

  • 超级json 自动序列化
  • 自定义映射, Set, dayjs等的序列化 .
  • 具有复杂对象的 Immer 或其他状态管理模式

对动作的使用

为了更好的调试经验, 在更新状态时提供动作名 :

const useStore = create<State>()(
  devtools(
    (set) => ({
      // ... your state
      updateUser: (user) => set({ user }, false, 'updateUser'),
      resetState: () => set(initialState, false, 'resetState'),
    }),
    { name: 'user-store' }
  )
);

用其他中间软件

插件与其他 Zustand 中间软件一样效果良好 immer 财务报告和审定财务报表 persist数字 :

import { create } from 'zustand';
import { immer } from 'zustand/middleware/immer';
import { persist, createJSONStorage } from 'zustand/middleware';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { devtools } from '@csark0812/zustand-expo-devtools';

const useStore = create<State>()(
  devtools(
    persist(
      immer((set) => ({
        // ... your state and actions
      })),
      {
        name: 'app-storage',
        storage: createJSONStorage(() => AsyncStorage),
      }
    ),
    { name: 'app-store' }
  )
);

生产结构

Devtools中相器在生产建设中自动被禁用,因此不需要担心去掉用于生产.

所需资源

  • 曝光 SDK 53+
  • 结晶 5.0.5+
  • 反应原生/世博会开发环境

社区与收养

见 社区与收养 用于公开执行报告、维护结果、下游融合和日期活动.

用包裹盖了东西? 使用 项目演示窗体 (c) 分享公开执行,但不暗示认可或生产用途.

发展

该寄存器包含:

  • /src - 主要devtools插件源代码
  • /webui - 连接到 Redux DevTools 扩展的 DevTools 网络用户界面
  • /examples/basic - 展示使用情况的世博会应用程序示例

举例来说:

cd examples/basic
npm install
npx expo start

要开发插件 :

# Install dependencies
npm install

# For development (rebuilds on changes)
npm run build:dev

# Build the plugin
npm run build

# Build the web UI
npm run web:export

# Build everything
npm run build:all

发展 工作流量: 修改了插件源代码后, 运行 npm run build:dev 在根文件夹中重建库。 这将更新实例应用程序用于测试您更改的编译代码 .

捐款

欢迎捐款! 请随意提交拉力请求.

自动释放

此寄存器在 PR 合并到 main。版本凸起类型由 PR 标签决定 :

  • major 标签 → 主要版本起伏(如 2. 0.0 → 3. 0.0) - 断裂变化
  • minor 标签 → 小版本起伏(例如 2.0.0 → 2.1.0) - 新特性
  • patch 标签 → 补丁版本凸起(如 2. 0.0 → 2. 0.1) - 错误修正(默认)

控制释放类型 :

  1. 添加适当的标签( :major, (中文(简体) ), minor,或 patch您的公关
  2. 如果没有添加标签,则默认为 patch 释放
  3. PR合并后,该版本会自动被撞出并发布到npm

许可证

麻省理工学院 克里斯托弗·萨尔基相

启发和信用

这个项目的灵感来自:

使用 :

版本与发布记录

@csark0812/zustand-expo-devtools 共发布 16 个版本,首次发布于 2025/05/25;过去 12 个月发布了 4 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
2.1.8latest2026/09/012 个月前
2.1.72026/04/027 个月前
2.1.62025/12/2010 个月前
2.1.52025/11/2711 个月前
2.1.32025/10/101.1 年前
2.1.22025/10/101.1 年前

关于 @csark0812/zustand-expo-devtools 的常见问题

@csark0812/zustand-expo-devtools 是什么?

Zustand 为 Expo 应用程序进行状态检查和时间旅行调试

如何安装 @csark0812/zustand-expo-devtools?

在项目目录运行 npm install @csark0812/zustand-expo-devtools,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:expo(*)、zustand(^5.0.5)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@csark0812/zustand-expo-devtools 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@csark0812/zustand-expo-devtools 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@csark0812/zustand-expo-devtools 可以商用吗?

@csark0812/zustand-expo-devtools 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@csark0812/zustand-expo-devtools 的下载量有多少?

根据 npm 官方下载统计,@csark0812/zustand-expo-devtools 在 2026/10/11 – 2026/11/09 这 30 天内被下载 138,343 次,日均约 4,611 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@csark0812/zustand-expo-devtools 还在维护吗?

最新版本 2.1.8 发布于 2026/09/01(2 个月前);至今共发布 16 个版本,其中过去 12 个月发布了 4 个;首次发布于 2025/05/25。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。