cn hx data - bradwoo8621/hx GitHub Wiki
@hx/data
基于 Proxy 的响应式数据管理,零依赖、支持 Tree-shaking、完整类型安全。
核心特性
- 嵌套响应式 — 对象和数组自动代理包装
- 路径变更追踪 — 用点号路径订阅任意深度的变更
- 通配符监听 — 全局监听(
*)或分支级监听(user.*) - 层级导航 — 在响应式树中上下遍历:父级、根级、路径解析
- 撤销代理 — 将响应式对象还原为普通 JavaScript 对象
- 类型化路径工具 — 安全的深层次
get/set,完整类型推导
安装
pnpm add @hx/data
快速示例
import { reactive, ERO } from '@hx/data';
// 创建响应式根对象
const state = reactive({
user: {
name: '张三',
address: { city: '北京' }
},
count: 0
});
// 监听变更
ERO.on(state, 'user.name', (event) => {
console.log(`姓名: ${event.oldValue} → ${event.newValue}`);
});
ERO.on(state, '*', (event) => {
console.log(`[${event.pathToRoot}] 已变更`);
});
// 修改自动触发监听器
state.user.name = '李四';
state.count = 1;
state.user.address.city = '上海';
API 总览
| 分类 | API | 说明 |
|---|---|---|
| 创建 | reactive() |
创建响应式根对象 |
| 监听 | ERO.on() |
订阅变更 |
ERO.off() |
取消订阅 | |
ERO.emit() |
手动触发变更事件 | |
| 检测 | ERO.isReactiveRoot() |
判断是否为响应式根对象 |
ERO.isReactiveObject() |
判断是否为响应式对象 | |
| 导航 | ERO.rootOf() |
从任意嵌套对象获取根对象 |
ERO.parentOf() |
获取父对象 | |
ERO.pathOf() |
解析到任意节点的路径 | |
ERO.pathToRoot() |
获取从根开始的绝对路径 | |
ERO.pathToParent() |
获取从父级开始的路径片段 | |
| 值操作 | ERO.getValue() |
按路径获取值 |
ERO.setValue() |
按路径设值(触发事件) | |
ERO.setValueSilent() |
静默设值(不触发事件) | |
| 撤销代理 | ERO.revoke() |
响应式 → 普通对象 |
| 工具 | ERO.fake() |
创建桩响应式对象 |
get() / set() |
底层路径遍历 | |
parsePath() |
解析路径字符串为片段 | |
EventEmitter |
独立发布/订阅 |