# 生命週期

- Human documentation: [https://docs.univer.ai/zh-TW/guides/boards/getting-started/lifecycle](https://docs.univer.ai/zh-TW/guides/boards/getting-started/lifecycle)

- Agent Markdown: [https://docs.univer.ai/zh-TW/guides/boards/getting-started/lifecycle.md](https://docs.univer.ai/zh-TW/guides/boards/getting-started/lifecycle.md)

- Requested language: `zh-TW`

- Content language: `zh-TW`

- Documentation version: `1.2.0`

- Source: [boards/getting-started/lifecycle.zh-TW.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/boards/getting-started/lifecycle.zh-TW.mdx)

---

## 全域生命週期

* **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)
})
```

> [!WARNING: 事件監聽的範圍]
> `LifeCycleChanged` 監聽的是 Univer 的全域階段。例如，全域已到 `Ready` 時才載入外掛 B，B 會執行 `onReady()`，但不會因此再次觸發全域 `Ready` 事件。
> 
> 新增監聽器時，回呼可能立即收到目前階段，包含 `Starting`。若只想知道目前到哪個階段，直接呼叫 `univerAPI.getCurrentLifecycleStage()`。

要移除監聽器，可使用回傳的 `disposable` 物件：

```typescript
disposable.dispose()
```

## 外掛生命週期鉤子

外掛實際載入時執行 `onStarting()`，接著補執行至目前全域階段的鉤子。選擇 B 的載入階段，觀察它與 A 的呼叫順序。



通用外掛在註冊時載入；業務類型外掛通常在首次建立對應類型的單元前載入；已啟動類型的新外掛會延遲批次載入。明確的相依關係可能使外掛提前載入。

同批外掛依相依順序、逐階段同步呼叫鉤子，不等待鉤子中的非同步工作。存取單元、DOM 或資源前，仍需確認對應物件就緒。
