說明
支持我們

選項 Hook

可變更 Preact 渲染的插件回呼函式。

Preact 支援多種不同的回呼,可用於觀察或變更渲染程序的每個階段,通常稱為「選項掛鉤」(不要與 掛鉤 混淆)。這些經常被用於擴充 Preact 本身的特點組,或建立特殊化的測試工具。我們所有的附加元件,例如 preact/hookspreact/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 時呼叫。