一个轻量级且高效的 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' )actionsfiltersdefaultHooks
参数
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 做出贡献的更多信息,请阅读项目的主要 贡献者指南。