Context 与 Data API(v1.1.0)
版本切换:函数 API 版本索引 | v1.1.0 概览
主题切换:Core 总览 | Service API | Functional 总览
这一页覆盖:
@stratix/core/context
@stratix/core/data
页面摘要
- 这一页解决两类问题:运行期共享上下文怎么组织,普通对象/数组数据怎么安全读写与变换。
context 更偏状态与作用域,data 更偏纯数据处理;不要把两者混成一套状态模型。
- 如果你只是查对象取值、深层设置、合并或比较,直接跳到下方
data 章节即可。
页内导航
@stratix/core/context
createContext(defaultValues?)
| 项 |
说明 |
| 作用 |
创建共享上下文对象 |
| 参数 |
defaultValues?: Partial<T> |
| 返回值 |
IContext<T> |
| 适合 |
请求上下文、局部共享状态、插件内部上下文 |
createNamespace(name, defaultValues?)
| 项 |
说明 |
| 作用 |
创建带命名空间名称的上下文 |
| 参数 |
name: string,defaultValues?: Partial<T> |
| 返回值 |
INamespaceContext<T> |
| 适合 |
多套上下文并存,需要区分来源时使用 |
IContext<T> 方法说明
| 方法 |
参数 |
返回值 |
说明 |
get(key) |
键名 |
对应值 |
读取字段 |
set(key, value) |
键名、值 |
IContext<T> |
写入字段,支持链式调用 |
has(key) |
键名 |
boolean |
检查字段是否存在 |
remove(key) |
键名 |
IContext<T> |
删除字段;如该键存在默认值则回退 |
getAll() |
无 |
T |
获取当前快照 |
onChange(handler) |
变更回调 |
取消订阅函数 |
监听整体变更 |
getName() |
无 |
string |
返回上下文名称摘要 |
setDefaults(defaultValues) |
默认值对象 |
IContext<T> |
更新默认值 |
withHandler(handler) |
处理函数 |
R |
把内部状态对象交给回调 |
clear() |
无 |
IContext<T> |
清空并恢复默认值 |
subscribe(key, handler) |
键名、字段回调 |
取消订阅函数 |
监听某个字段变更 |
@stratix/core/data
对象访问与变换
| API |
参数 |
返回值 |
说明 |
get(object, path, defaultValue?) |
对象、点路径/路径数组、默认值 |
T |
安全读取嵌套字段 |
has(object, path) |
对象、点路径/路径数组 |
boolean |
判断路径是否存在 |
set(object, path, value) |
对象、点路径/路径数组、值 |
原对象 |
写入嵌套字段,不存在的中间层会自动创建 |
keys(object) |
对象 |
Array<keyof T> |
取键数组 |
values(object) |
对象 |
值数组 |
取值数组 |
entries(object) |
对象 |
键值对数组 |
取 entries |
fromEntries(entries) |
键值对数组 |
对象 |
把 entries 还原成对象 |
mapKeys(object, mapper) |
对象、键映射函数 |
新对象 |
变换对象键名 |
mapValues(object, mapper) |
对象、值映射函数 |
新对象 |
变换对象值 |
transform(object, transformer, initialValue) |
对象、转换函数、初始值 |
累积结果 |
自定义对象变换 |
isObject(value) |
任意值 |
boolean |
判断是否为对象且不是数组 |
使用示例
import { get, pick, set } from '@stratix/core/data';
const payload = {};
set(payload, 'user.profile.email', 'alice@example.com');
const email = get(payload, 'user.profile.email', '');
选择工具
| API |
参数 |
返回值 |
说明 |
pick(object, paths) |
源对象、字段数组 |
新对象 |
只保留指定字段 |
omit(object, paths) |
源对象、字段数组 |
新对象 |
排除指定字段 |
适合:
合并与克隆
| API |
参数 |
返回值 |
说明 |
assign(target, ...sources) |
目标对象、源对象列表 |
合并后的目标对象 |
浅合并,后面的覆盖前面的 |
defaults(target, ...sources) |
目标对象、源对象列表 |
合并结果 |
只补缺失字段,不覆盖已存在字段 |
deepClone(value) |
任意值 |
克隆结果 |
深拷贝对象、数组、日期等 |
deepMerge(target, source) |
两个对象 |
合并后的新结构 |
深度合并嵌套对象和数组 |
immutableDeepMerge(target, source) |
两个对象 |
全新对象 |
返回新的深度合并结果,不修改原对象 |
适合:
- 配置合并
- 默认参数叠加
- 需要保留原对象的不可变数据处理
数组工具
| API |
参数 |
返回值 |
说明 |
chunk(array, size?) |
数组、分块大小 |
T[][] |
把数组拆成小数组 |
compact(array) |
数组 |
新数组 |
去掉 false/null/0/''/undefined/NaN 等假值 |
difference(array, ...values) |
原数组、排除数组们 |
新数组 |
求差集 |
flatten(array, depth?) |
嵌套数组、深度 |
新数组 |
扁平化 |
groupBy(array, iteratee) |
数组、字段名或函数 |
分组对象 |
按字段或规则分组 |
keyBy(array, iteratee) |
数组、字段名或函数 |
键值对象 |
以字段或规则生成映射对象 |
intersection(...arrays) |
多个数组 |
新数组 |
求交集 |
partition(array, predicate) |
数组、判断函数 |
[匹配, 不匹配] |
按条件拆成两组 |
reduce(array, iteratee, initialValue) |
数组、归并函数、初始值 |
累积值 |
函数式 reduce |
shuffle(array) |
数组 |
新数组 |
随机打乱 |
sortBy(array, iteratee) |
数组、字段名或函数 |
新数组 |
按字段或规则排序 |
take(array, count) |
数组、数量 |
新数组 |
取前 N 个元素 |
union(...arrays) |
多个数组 |
新数组 |
求并集 |
unique(array) |
数组 |
新数组 |
去重 |
比较工具
| API |
参数 |
返回值 |
说明 |
isEmpty(value) |
任意值 |
boolean |
判断空值、空字符串、空数组、空对象 |
isNotEmpty(value) |
任意值 |
boolean |
isEmpty 的反向结果 |
isEqual(value, other) |
任意两个值 |
boolean |
深度比较 |
使用建议
- 要读深层字段,优先
get(),不要手写多层可选链之后又塞默认值。
- 要做配置合并,优先
deepMerge(),不要混用 Object.assign() 和手工递归。
- 要输出“去掉敏感字段”的响应对象,优先
omit()。
- 数组分组、建索引场景下,
groupBy() 和 keyBy() 比手写循环更稳定、更清楚。