form-core

框架无关的状态引擎:FormStore、ChangeTag、Middleware 与 resolver

form-core/ 不依赖 React,是整个包的状态引擎;react/ 只负责把它桥接到 React。

FormStore

createStore.ts 里的状态引擎,职责:

  • 字段注册与注销
  • 值与 meta(touched / dirty / validating)
  • 校验调度
  • 数组操作
  • submit 生命周期

ChangeTag

event.ts 把「值 / 校验状态 / 数组结构」变化标记为 bitmask 的不同位,订阅时按位匹配。这是精确订阅的底层机制,用法侧见 精确订阅

相关文件还有 event-value.tsflag-set.ts

Middleware

middleware.ts 提供 Action 拦截管道。所有状态变更都以 Action 形式经过管道,中间件可以观察、改写或拦截。

const logger: Middleware = (action, next, store) => {
  console.log('[form]', action.type, action.payload);
  return next(action);
};

useForm({ middlewares: [logger] });

Action 类型从主入口导出。

schema resolver 本身就是一个中间件——校验 不是特例逻辑,而是走同一条管道。useUndoRedo 的历史记录同理。

resolver

文件作用
resolver/standard.ts适配 StandardSchemaV1(Zod / Yup / Valibot / ArkType)
resolver/resolver.ts自定义 schema 接入
resolver/utils.ts路径与错误结构转换

React 层怎么接

React 层做什么
Form创建 store,通过 context 向下传
FielduseSyncExternalStore 订阅自己那条路径
各 hook包装 store 方法,提供 React 友好的 API
FieldContext.tsFormInstance 的实现与类型核心

能不能脱离 React 用

理论上可以(React Native、Solid 等),但当前 ./react 是唯一公开子入口,form-core 没有单独发布入口。要复用得直接从源码路径引,不在公开 API 承诺范围内。

分层动机见 包分层与依赖方向

Last updated on