Skip to content
目录

关键设计决策与 Issue/PR 依据

本章把“设计结论”与“社区证据”对齐,避免只讲理念不讲依据。

1. 决策:模型层先于视图层

结论:将表单状态管理放在 @formily/core,UI 只负责映射渲染。
源码依据Form/Field 负责值、校验、联动、生命周期;React 层只桥接事件与上下文。
价值:跨框架、可测试、复杂联动可控。


2. 决策:主动联动 + 被动联动并存

结论:不强制单一联动范式。
源码依据

  • 主动:onFieldValueChange/onForm* 等 effect hooks。
  • 被动:createReactions + autorun/reaction

价值:兼顾业务可读性(一对多)与表达力(多对一计算)。


3. 决策:数组操作必须做状态转置

结论:数组值变更必须同步迁移字段状态图。
源码依据spliceArrayState/exchangeArrayState/cleanupArrayChildren
演进证据

说明:这是动态列表表单能否稳定运行的关键,不是“可选优化”。


4. 决策:表达式编译默认高能力,但开放可替换

结论:默认 new Function + with,并提供 registerCompiler
源码依据packages/json-schema/src/compiler.ts
演进证据

  • CSP 兼容问题反馈:#4338

权衡

  • 默认能力强,适合低代码场景;
  • 安全要求高的项目需要替换编译器。

5. 决策:响应式调度追求“正确 + 低噪声”

结论:不断修正链式 reaction 的遗漏与多余触发。
证据

启示:响应式系统在复杂依赖下,性能优化必须建立在语义正确之上。


6. 决策:校验触发可配置(pattern/display 维度)

结论:允许用户控制 validator 在哪些交互模式/展示状态生效。
源码依据shouldValidate() 判断 validatePattern/validateDisplay
证据


7. 决策:React 并发场景下做 GC 兜底

结论:observer tracker 释放不能完全依赖传统 unmount 路径。
源码依据useCompatFactory + GarbageCollector
价值:降低 StrictMode/并发场景下 reaction 泄漏风险。


8. 如何在技术讨论中使用这些证据

推荐结构:

  1. 先给设计结论(1 句话)。
  2. 再给源码锚点(类/函数名)。
  3. 最后给社区演进链接(Issue/PR)证明这是现实问题而非纸上理论。

这会显著提升你的“架构可信度表达”。

MIT License.