Lifecycle
Lifecycle 规范
三种不同的生命期
Section titled “三种不同的生命期”Proto UI 明确区分过去很容易混在一起的三个对象:
- 宿主组件实例拥有 adapter 的集成边界。
- Proto instance 拥有 setup 声明、状态、Context/Anatomy 参与关系与 exposes。
- mounted view 是 Proto instance 在宿主中的一次可替换渲染。
React 或 Vue 可以移除并重新创建 view,而 adapter 组件实例与 Proto instance 继续存活。Web Component 的同步 DOM move 仍视作同一次所有权;确认后的 disconnect 默认是终止边界。
adapt(proto) 只定义宿主组件类型,不执行 proto.setup。宿主组件实例物化自己的 Proto instance 时才执行 setup,并且对该实例只执行一次。
两条正交的 phase 轴
Section titled “两条正交的 phase 轴”InstancePhase: setup -> alive -> disposing -> disposed
MountPhase: detached -> mounting -> mounted -> unmounting -> detached ^ | +----------------------------------+只要 InstancePhase 仍是 alive,mount loop 就可以重复;disposed 是终态。
原型可见 callback
Section titled “原型可见 callback”def.lifecycle.onCreated((run) => { // 每个 Proto instance 一次,早于首次 view render。});
def.lifecycle.onMounted((run) => { // 每个 mount epoch 的 commit 完成后一次。});
def.lifecycle.onUpdated((run) => { // 对应的 mounted update commit 完成后执行。});
def.lifecycle.onUnmounted((run) => { // 每个被 detach 的 epoch 一次;instance state 仍然存活。});
def.lifecycle.onBeforeDispose((run) => { // 终止失效之前只执行一次。});这些注册 API 都是 setup-only。onUnmounted 是可重复边界,不能再承担 instance 的最终清理;终止职责应放在 onBeforeDispose。
Canonical order
Section titled “Canonical order”setup -> created -> (mounting -> render -> commit -> mounted -> (update -> render -> commit -> updated)* -> unmounting -> unmounted -> detached)* -> beforeDispose -> disposedcommit completion 是语义边界,异步宿主可以稍后确认。调度任务必须绑定所属 epoch;如果 epoch 已失效,任务只能成为 no-op。
detached 期间,state、props、context 等逻辑通道仍可变化。update request 只记录 dirty,不执行宿主 commit;下一次 mount 必须从最新 snapshot 渲染。
逻辑身份与宿主资源
Section titled “逻辑身份与宿主资源”Context 与 Anatomy 使用稳定的 logical instance token,而不是把 DOM element 当成组件身份。每个 mount epoch 把 token 绑定到当前 root;detach 时移除 event listener、focus participation、overlay、observer 等 view resource,但保留逻辑状态和树参与关系。下一次 mount 再绑定到新的 root。
terminal dispose 会使 handle 失效,并删除 Context/Anatomy 的逻辑参与。宿主 hard teardown 具有最终决定权,不能被一个未完成的 presence animation 无限阻塞。
Runtime diagnostics
Section titled “Runtime diagnostics”instance.created、mount.phase、mount.commit.done、update.updated、unmount.done、instance.dispose.done 等结构化事件构成 canonical diagnostic stream。mount event 带 epoch,update event 还带 revision。
CP0-CP10 checkpoint 已弃用。Adapter 可以暂时输出有损的兼容投射,但新的测试与工具必须消费结构化事件。
Lifecycle 覆盖由 T-LIFECYCLE-0001..0005 编目,并由 RuntimeSession 以及 React、Vue、Web Component adapter 测试执行。