UNPKG

@idooel/runtime-context

Version:

Runtime data pool with namespaces, stackable contexts, subscriptions and optional persistence. Vue adapter included.

67 lines (51 loc) 2.27 kB
// 核心库使用示例(不依赖 Vue) import { createDataPool } from '@idooel/runtime-context/core' // 1. 创建数据池 const pool = createDataPool() // 2. 基本读写操作(自动添加 idooel 前缀) pool.set('user', 'token', 'abc123') // 实际存储为 'idooel.user' pool.set('user', 'profile', { name: '张三', age: 25 }) pool.set('app', 'theme', 'dark') // 读取数据 const token = pool.get('user', 'token') // 'abc123' const profile = pool.get('user', 'profile') // { name: '张三', age: 25 } const theme = pool.get('app', 'theme', 'light') // 'dark' console.log('Token:', token) console.log('Profile:', profile) console.log('Theme:', theme) // 查看实际的命名空间(带前缀) const snapshot = pool.snapshot({ merged: true }) console.log('带前缀的数据结构:', snapshot) // 3. 订阅数据变更(保持一致性) const unsubscribe = pool.subscribe({ ns: 'user', key: 'profile' }, (event) => { console.log('用户资料更新:', event.value) console.log('命名空间:', event.ns) // 显示 'user',而不是 'idooel.user' }) // 更新数据会触发订阅 pool.set('user', 'profile', { name: '李四', age: 30 }) // 4. 上下文隔离(也会自动添加前缀) const userContext = pool.createContext({ user: { role: 'admin' }, // 实际为 'idooel.user' app: { theme: 'light' } // 实际为 'idooel.app' }) pool.runInContext(userContext, () => { // 在上下文中读取,会覆盖全局数据 const theme = pool.get('app', 'theme') // 'light' (来自上下文) const role = pool.get('user', 'role') // 'admin' (仅存在于上下文) // 设置数据到当前上下文 pool.set('user', 'permissions', ['read', 'write']) console.log('上下文中的主题:', theme) console.log('用户角色:', role) }) // 退出上下文后,上下文中的数据不可访问 const permissions = pool.get('user', 'permissions') // undefined console.log('上下文外权限:', permissions) // 5. 数据快照 const snapshot = pool.snapshot({ merged: true }) console.log('数据快照:', snapshot) // 6. 清理订阅 unsubscribe() // 7. 删除和清空操作 pool.delete('user', 'token') pool.clear('app') // 清除 app 命名空间下的所有数据 pool.clear() // 清除所有数据