选项挂钩
用于插件的回调,这些插件可以更改 Preact 的渲染。
Preact 支持许多不同的回调,这些回调可用于观察或更改渲染过程的每个阶段,通常称为“选项挂钩”(不要与挂钩混淆)。这些回调通常用于扩展 Preact 自身的特性集,或创建专门的测试工具。我们所有的插件,如 preact/hooks
、preact/compat
和我们的 devtools 扩展都基于这些回调。
此 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
最常见的选项挂钩 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
在关联的 Virtual 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
钩子被调用时调用。