生命周期

全局生命周期

  • Starting: 初始化,尚未创建业务实例。
  • Ready: 首个业务实例创建完成;后续实例不会重新触发。
  • Rendered: 标准 UI 完成首次渲染切换,不保证所有异步内容就绪。
  • Steady: 标准 UI 在 Rendered 后延时进入,不代表全部异步任务完成。

Facade API

TypeScript
const currentStage = univerAPI.getCurrentLifecycleStage()const disposable = univerAPI.addEvent(univerAPI.Event.LifeCycleChanged, ({ stage }) => {  console.log(stage)})

事件监听的范围

LifeCycleChanged 监听的是 Univer 的全局阶段。例如,全局已到 Ready 时再加载插件 B,B 会执行 onReady(),但不会因此再次触发全局 Ready 事件。

添加监听器时,回调可能立即收到当前阶段,包括 Starting。如果只是想知道“现在到哪个阶段了”,直接调用 univerAPI.getCurrentLifecycleStage()。

要移除监听器,可以使用返回的 disposable 对象:

TypeScript
disposable.dispose()

插件生命周期钩子

插件在实际加载时执行 onStarting(),随后补执行至当前全局阶段的钩子。选择 B 的加载阶段,观察它与 A 的调用顺序。

B 的加载阶段 · Rendered
Starting全局插件 A未加载加载StartingReadyRenderedSteady插件 B未加载加载StartingReadyRenderedSteady
全局: Starting全局: Starting · 1 / 14

为展示同步钩子的调用顺序,演示已放慢。

通用插件在注册时加载;业务类型插件通常在首次创建对应类型的实例前加载;已启动类型的新插件会延迟批量加载。显式依赖可能让插件提前加载。

同一批插件按依赖顺序、逐阶段同步调用钩子,不等待钩子中的异步任务。访问业务实例、DOM 或资源前,仍需确认对应对象就绪。

你觉得这篇文档如何?

© 2026 DreamNum Co., Ltd.