生命周期
在 Univer 应用运行过程中,系统会经历一系列有序的生命周期阶段。了解这些生命周期对于开发者来说非常重要,因为这有助于判断何时可以安全地访问业务实例、DOM 元素或进行耗时的异步操作。不同阶段适合执行不同类型的初始化、渲染和性能优化任务。通过监听生命周期变化,开发者能够在最佳时机响应系统状态的变化,实现功能扩展、性能提升或用户体验优化。
Univer 的生命周期主要包括以下四个阶段:
- Starting:系统开始初始化,插件内部会进行依赖注入和基础配置。
- Ready:第一个业务实例已创建,插件内部会进行核心功能的初始化。
- Rendered:界面首次渲染完毕,可以安全操作 DOM 或进行界面相关的初始化。
- Steady:系统进入稳定状态,适合执行延迟加载、非关键性任务等优化操作。
不同类型的插件或组件,其生命周期启动时机可能不同,但整体流程遵循上述顺序。开发者可以通过生命周期事件,精准把控功能的加载与执行时机。
想要深入了解 Univer 的生命周期设计以及具体的插件启动时机,可以在 《Univer 架构#插件生命周期》 中找到相关内容。
Facade API
添加监听器
Univer 提供了统一的事件订阅接口,开发者可以通过 Facade API 监听生命周期的变化:
TypeScript
const disposable = univerAPI.addEvent(univerAPI.Event.LifeCycleChanged, ({ stage }) => { if (stage === univerAPI.Enum.LifecycleStages.Steady) { // 在 Steady 阶段执行自定义逻辑 }})移除监听器
要移除监听器,可以使用返回的 disposable 对象:
TypeScript
disposable.dispose()生命周期事件与枚举
Univer 提供了以下生命周期事件和枚举,供开发者使用:
-
事件名:
univerAPI.Event.LifeCycleChanged -
生命周期阶段枚举:
univerAPI.Enum.LifecycleStages.StartinguniverAPI.Enum.LifecycleStages.ReadyuniverAPI.Enum.LifecycleStages.RendereduniverAPI.Enum.LifecycleStages.Steady
生命周期监听示例
注意事项
univerAPI.Event.LifeCycleChanged 只会反应生命周期的变化,因此在 Starting 阶段不会触发任何事件。
TypeScript
const disposable = univerAPI.addEvent(univerAPI.Event.LifeCycleChanged, ({ stage }) => { switch (stage) { case univerAPI.Enum.LifecycleStages.Ready: console.log('业务实例已创建,可以进行核心初始化') break case univerAPI.Enum.LifecycleStages.Rendered: console.log('界面渲染完成,可以安全操作 DOM') break case univerAPI.Enum.LifecycleStages.Steady: console.log('系统已稳定,可进行延迟加载等优化操作') break }})// 移除监听器disposable.dispose()你觉得这篇文档如何?