view 連接邏輯層
畫面層專用,只在雙執行緒(runtime: 'dual')時可用;單執行緒呼叫會以 NOT_ALLOWED 失敗。需要容器 1.1.0(建議 1.2.0)。概念見單執行緒與雙執行緒。
sdk.view.connect()
ts
sdk.view.connect<D extends Record<string, unknown>>(
onData: (data: D) => void,
onError?: (error: unknown) => void,
): () => void- 向邏輯層取一份完整的資料快照,回呼
onData一次。 - 之後邏輯層每次
setData,都以合併後的完整資料(新物件)回呼onData。 - 回傳取消函式;元件卸載時呼叫。
- 邏輯層還沒啟動完成時,第一次回呼可能是空物件
{},definePage的初始資料隨後以更新送達。畫面要能處理欄位還不存在的情況,判斷「已載入」時請檢查明確的欄位值(例如status === 'ready'),不要用「不是 loading」。 - 取快照失敗(例如不在容器內)時呼叫
onError,之後不會再回呼onData。 - 可以多次呼叫(多個元件各自連接),每個都拿到正確的資料。
- 快照與更新的先後由 SDK 處理(容器 1.2.0 起帶序號),不會漏掉、也不會用舊值蓋掉新值。
ts
const off = sdk.view.connect<ViewData>(
(data) => { state.value = data; },
() => { state.value = { ...state.value, status: 'error' }; },
);
onBeforeUnmount(off);sdk.view.emit()
ts
sdk.view.emit(name: string, payload?: unknown): Promise<void>把畫面事件送給邏輯層,觸發 definePage({ handlers }) 裡的 handlers[name](payload)。
name最多 64 字。payload必須能 JSON 序列化。- Promise 在容器收到事件後 resolve,不代表 handler 已經執行完;結果請透過
setData回到畫面層。 - 邏輯層還在啟動時送出的事件會排隊,啟動後依序送達。
- 邏輯層啟動失敗時以
INTERNAL失敗(此時畫面已經顯示錯誤頁)。 - 邏輯層沒有對應的 handler 時,錯誤會上報給容器,但
emit本身不會失敗。