選項 Hook
可變更 Preact 渲染的插件回呼函式。
Preact 支援多種不同的回呼,可用於觀察或變更渲染程序的每個階段,通常稱為「選項掛鉤」(不要與 掛鉤 混淆)。這些經常被用於擴充 Preact 本身的特點組,或建立特殊化的測試工具。我們所有的附加元件,例如 preact/hooks
、preact/compat
和我們的開發工具擴充元件,都是基於這些回呼。
此 API 主要供希望擴充 Preact 的工具或函式庫作者使用。
版本化和支援
選項掛鉤會在 Preact 中出貨,因此是語意化版本化的。然而,它們沒有相同的棄用政策,這表示主要版本可以在沒有長期的公告期導致發布的情況下變更 API。這也適用於透過選項掛鉤公開的內部 API 結構,例如 VNode
物件。
設定選項掛鉤
你可以透過修改外傳的 options
物件,在 Preact 中設定選項掛鉤。
在定義掛鉤時,務必在有先前定義的同名掛鉤時呼叫它。沒有這樣做,呼叫鏈會中斷,而且依賴於先前安裝的掛鉤的程式碼會中斷,導致像 preact/hooks
或 DevTools 這樣的附加元件停止運作。務必也傳遞相同的引數給原始掛鉤,除非你有特定理由要變更它們。
import { options } from 'preact';
// Store previous hook
const oldHook = options.vnode;
// Set our own options hook
options.vnode = vnode => {
console.log("Hey I'm a vnode", vnode);
// Call previously defined hook if there was any
if (oldHook) {
oldHook(vnode);
}
}
除了 options.event
之外,目前沒有可用的掛鉤具有傳回值,因此不需要處理來自原始掛鉤的傳回值。
可用的選項掛鉤
options.vnode
簽章: (vnode: VNode) => void
最常見的 Options Hook,vnode
會在建立 VNode 物件時呼叫。VNode 是 Preact 表示虛擬 DOM 元素,通常被認為是「JSX 元素」。
options.unmount
簽章: (vnode: VNode) => void
在 vnode 卸載前立即呼叫,此時其 DOM 表示仍附加。
options.diffed
簽章: (vnode: VNode) => void
在 vnode 渲染後立即呼叫,其 DOM 表示已建構或轉換為正確狀態時。
options.event
簽章: (event: Event) => any
在 DOM 事件由其關聯的虛擬 DOM 監聽器處理之前立即呼叫。當設定 options.event
時,事件監聽器引數的事件會被替換為 options.event
的回傳值。
options.requestAnimationFrame
簽章: (callback: () => void) => void
控制 preact/hooks
中效果和基於效果的功能的排程。
options.debounceRendering
簽章: (callback: () => void) => void
用於批次處理全域元件渲染佇列中更新的計時「遞延」函式。
預設情況下,Preact 使用零持續時間的 setTimeout
。
options.useDebugValue
簽章: (value: string | number) => void
在 preact/hooks
中呼叫 useDebugValue
Hook 時呼叫。