帮助
支持我们

选项挂钩

用于插件的回调,这些插件可以更改 Preact 的渲染。

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