一个轻量级且高效的 JavaScript EventManager。

安装

安装该模块

npm install @wordpress/hooks --save

本包假定您的代码将在 ES2015+ 环境中运行。如果您使用的环境对这类语言特性和 API 的支持有限或完全不支持,则应在代码中包含 @wordpress/babel-preset-default 随附的 polyfill。

用法

在您的 JavaScript 项目中,按以下方式挂钩(hooks):

import { createHooks } from '@wordpress/hooks';

myObject.hooks = createHooks();
myObject.hooks.addAction(); // etc...

全局实例

在上述示例中,我们创建了一个自定义的 Hooks 对象实例并在那里注册钩子。该包还创建了一个默认的 global 实例,可通过 defaultHooks 命名导出访问,其方法也单独逐次导出。

在 WordPress 上下文中,这允许通过全局 wp.hooks 对象调用 API 函数,例如 wp.hooks.addAction() 等。

JS 和 PHP 挂钩 API 之间的一个显著区别是,在 JS 版本中,addAction() 和 addFilter() 还需要包含一个命名空间作为第二个参数。命名空间以 vendor/plugin/function 的形式唯一标识回调函数。

API 用法

  • createHooks()
  • addAction( 'hookName', 'namespace', callback, priority )
  • addFilter( 'hookName', 'namespace', callback, priority )
  • removeAction( 'hookName', 'namespace' )
  • removeFilter( 'hookName', 'namespace' )
  • removeAllActions( 'hookName' )
  • removeAllFilters( 'hookName' )
  • doAction( 'hookName', arg1, arg2, moreArgs, finalArg )
  • doActionAsync( 'hookName', arg1, arg2, moreArgs, finalArg )
  • applyFilters( 'hookName', content, arg1, arg2, moreArgs, finalArg )
  • applyFiltersAsync( 'hookName', content, arg1, arg2, moreArgs, finalArg )
  • doingAction( 'hookName' )
  • doingFilter( 'hookName' )
  • didAction( 'hookName' )
  • didFilter( 'hookName' )
  • hasAction( 'hookName', 'namespace' )
  • hasFilter( 'hookName', 'namespace' )
  • actions
  • filters
  • defaultHooks

参数

hookName

应为非空字符串,仅包含数字、字母、连字符、句点和下划线。此外,钩子名称不能以 __ 开头。

  • 类型:String
  • 必需:是

namespace

应为非空字符串,仅包含数字、字母、连字符、句点、下划线和斜杠。它应采用 vendor/plugin/function 的形式。

  • 类型:String
  • 必需:是

添加或删除动作/过滤器时的事件

每当添加或删除动作或过滤器时,都会触发匹配的 hookAdded 或 hookRemoved 动作。

  • 当调用 addFilter() 或 addAction() 方法时,将触发 hookAdded 动作,传递 hookName、functionName、callback 和 priority 的值。
  • 当调用 removeFilter() 或 removeAction() 方法时,将触发 hookRemoved 动作,传递 hookName 和 functionName 的值。

all 钩子

在非压缩构建中,开发人员可以注册一个过滤器或动作,该动作将在所有钩子上调用,例如:addAction( 'all', 'namespace', callbackFunction );。出于性能原因,支持 all 钩子的代码在生产代码中会被剥离,但这对调试非常有用。

为此包做出贡献

这是 Gutenberg 项目的一部分,是一个独立的包。该项目被组织为一个 monorepo。它由多个自包含的软件包组成,每个包都有特定的用途。此 monorepo 中的包发布到 npm,并被 WordPress 以及其他软件项目使用。

要了解有关为此包或整个 Gutenberg 做出贡献的更多信息,请阅读项目的主要 贡献者指南。