Core Data 是一个 数据模块,旨在简化对核心 WordPress 实体的访问和操作。它注册了自己的 store,并提供了一系列选择器(selectors),这些选择器会自动从 WordPress REST API 解析数据,同时提供用于操作数据的动作创建者(action creators)。Core Data 随附了 WordPress 数据类型的 TypeScript 定义。
与数据模块的特性(如 subscribe 或 高阶组件)结合使用,它使开发人员能够轻松地将数据添加到插件的逻辑和显示中。
安装
安装该模块
npm install @wordpress/core-data --save
此包假定您的代码将在 ES2015+ 环境中运行。如果您使用的环境对此类语言特性和 API 的支持有限或完全不支持,则应在代码中包含 @wordpress/babel-preset-default 随附的 polyfill。
要求
TypeScript 使用者需要 TypeScript 5 或更高版本。
示例
以下是一个仅呈现作者列表的组件示例:
const { useSelect } = wp.data;
function MyAuthorsListBase() {
const authors = useSelect( ( select ) => {
return select( 'core' ).getUsers( { who: 'authors' } );
}, [] );
if ( ! authors ) {
return null;
}
return (
<ul>
{ authors.map( ( author ) => (
<li key={ author.id }>{ author.name }</li>
) ) }
</ul>
);
}
什么是实体?
实体代表一个数据源。实体中的每一项称为实体记录(entity record)。可用的实体在 ./src/entities.js 中的 rootEntitiesConfig 中定义。
截至目前,此包定义的默认实体映射到 REST API 手册,尽管其设计中没有任何内容阻止它与任何其他 API 交互。
以下是 rootEntitiesConfig 某些属性的描述。
将实体与数据源连接
baseURL
- 类型:string。
- 示例:
'/wp/v2/users'。
此属性将实体映射到给定的端点,以其相对 URL 作为值。
baseURLParams
- 类型:
object。 - 示例:
{ context: 'edit' }。
请求的其他参数,作为查询字符串添加。每个属性将被转换为字段/值对。例如,给定 baseURL: '/wp/v2/users' 和 baseURLParams: { context: 'edit' },URL 将为 /wp/v2/users?context=edit。
key
- 类型:
string。 - 示例:
'slug'。
实体引擎旨在将 API 响应转换为多个实体记录。响应可以具有不同的形状,处理方式也不同。
表示单个对象的响应映射到单个实体记录。例如:
{
"title": "...",
"description": "...",
"...": "..."
}
表示数组形状的集合的响应,映射为与数组元素数量相等的实体记录。例如:
[
{ "id": 1, "name": "...", "...": "..." },
{ "id": 2, "name": "...", "...": "..." },
{ "id": 3, "name": "...", "...": "..." }
]
还有一种情况是响应表示一个对象形状的集合,其键是某个属性的值。每个嵌套对象都应该是独立的实体记录。为了避免这种情况与单个对象/实体混淆,实体配置必须提供持有作为对象键的值的属性键。在以下示例中,slug 属性的值充当对象键,因此实体配置必须声明 key: 'slug',以便将每个嵌套对象处理为单独的实体记录:
{
"publish": { "slug": "publish", "name": "Published", "...": "..." },
"draft": { "slug": "draft", "name": "Draft", "...": "..." },
"future": { "slug": "future", "name": "Future", "...": "..." }
}
与实体记录交互
实体记录是唯一的。对于集合类型的实体,假设每个记录都有一个 id 属性,用作管理它的标识符。如果实体定义了 key,则该属性将用作其标识符,而不是假定的 id。
name
- 类型:
string。 - 示例:
user。
实体的名称。用于与其交互的工具(选择器、动作、钩子)。
kind
- 类型:
string。 - 示例:
root。
实体可以根据 kind 进行分组。用于与其交互的工具(选择器、动作、钩子)。
该包通过利用 kind 和 name 属性,提供了与实体交互的一般方法(getEntityRecords、getEntityRecord 等):
// 获取用户实体的记录集合。
wp.data.select( 'core' ).getEntityRecords( 'root', 'user' );
// 获取用户实体的单个记录。
wp.data.select( 'core' ).getEntityRecord( 'root', 'user', recordId );
plural
- 类型:
string。 - 示例:
statuses。
除了通用工具(getEntityRecords、getEntityRecord 等)之外,该包还会动态创建更美观的方法来交互 root 类型的实体记录,包括集合记录和单条记录。比较通用方法和更美观的方法如下:
// 集合
wp.data.select( 'core' ).getEntityRecords( 'root', 'user' );
wp.data.select( 'core' ).getUsers();
// 单条记录
wp.data.select( 'core' ).getEntityRecord( 'root', 'user', recordId );
wp.data.select( 'core' ).getUser( recordId );
有时,实体的复数形式是不规则的(不是通过添加 -s 后缀形成的)。实体配置的 plural 属性允许为实体创建的动态方法声明替代复数形式。例如,给定声明 statuses 复数形式的 status 实体,为其创建了以下方法:
// 集合
wp.data.select( 'core' ).getStatuses();
// 单条记录
wp.data.select( 'core' ).getStatus( recordId );
同步实体记录(私有)
Store 提供了一个私有扩展点,用于与实体同步管理器进行实时协作。当注册了一个同步管理器时,store 会告知它何时加载、编辑、保存和删除记录,并让它接管撤销操作。Store 本身并不了解同步是如何工作的。
接口位于 src/entity-sync.ts。registerEntitySyncManager( manager ) 和 getEntitySyncManager() 目前是该包的内部函数,并未公开。一次只能注册一个管理器。EntitySyncManager 类型记录了接口规范。
Actions
以下一组动作创建者可在 wp.data.dispatch( 'core' ) 返回的对象上使用:
addEntities
返回一个用于添加新实体的动作对象。
参数
- entities
Array:接收到的实体。
返回
Object:动作对象。
clearEntityRecordEdits
触发清除实体记录所有编辑的动作。
参数
- kind
string:实体的类型。 - name
string:实体的名称。 - recordId
[number|string]:无 key 的实体省略此项。
返回
Object:动作对象。
deleteEntityRecord
触发删除实体记录的动作。
参数
- kind
string:被删除实体的类型。 - name
string:被删除实体的名称。 - recordId
number|string:被删除实体的记录 ID。 - query
?Object:DELETE API 调用的特殊查询参数。 - options
[Object]:删除选项。 - options.__unstableFetch
[Function]:仅供内部使用。代替apiFetch()调用的函数。必须返回一个 promise。 - options.throwOnError
[boolean]:如果为 false,此动作将抑制所有异常。默认为 false。
editEntityRecord
返回一个触编辑实体记录的动作对象。
参数
- kind
string: 被编辑实体记录的类型。 - name
string: 被编辑实体记录的名称。 - recordId
number|string|undefined: 对于无键实体,传递undefined。 - edits
Object: 编辑内容。 - options
Object: 编辑选项。 - options.undoIgnore
[boolean]: 是否在撤销历史中忽略此编辑。 - options.isCached
[boolean]: 该编辑是否为临时性的(例如正在输入)。临时性编辑会被暂存并最终合并到前一个撤销级别中,而不是创建一个新的级别。
返回
Object: 动作对象。
receiveDefaultTemplateId
返回一个用于为给定查询设置模板的动作对象。
参数
- query
Object: 查找查询。 - templateId
string: 解析后的模板 ID。
返回
Object: 动作对象。
receiveEntityRecords
返回一个用于表示已接收实体记录的动作对象。
参数
- kind
string: 接收到的实体记录的类型。 - name
string: 接收到的实体记录的名称。 - records
Array|Object: 接收到的记录。 - query
?Object: 查询对象。 - invalidateCache
?boolean: 是否应使查询缓存失效。 - edits
?Object: 需要重置的编辑。 - meta
?Object: 关于分页的元信息。
返回
Object: 动作对象。
receiveNavigationFallbackId
返回一个表示已接收到备用导航菜单 ID 的动作对象。
参数
- fallbackId
integer: 备用导航菜单的 ID
返回
Object: 动作对象。
receiveRevisions
触发以接收修订项的动作。
参数
- kind
string: 接收到的实体记录修订的类型。 - name
string: 接收到的实体记录修订的名称。 - recordKey
number|string: 您想要获取其修订的实体记录的键。 - records
Array|Object: 接收到的修订。 - query
?Object: 查询对象。 - invalidateCache
?boolean: 是否应使查询缓存失效。 - meta
?Object: 关于分页的元信息。
receiveThemeSupports
已弃用 自 WP 5.9 起,此方法不再有用,请直接使用选择器。
返回一个用于表示索引已接收的动作对象。
返回
Object: 动作对象。
receiveUploadPermissions
已弃用 自 WP 5.9 起,请使用 receiveUserPermission 代替。
返回一个用于表示已接收上传权限的动作对象。
参数
- hasUploadPermissions
boolean: 用户是否有权限上传文件?
返回
Object: 动作对象。
redo
触发以重做对实体记录的最后一次撤销操作(如果有)的动作。
saveEditedEntityRecord
触发以保存实体记录编辑的动作。
参数
- kind
string: 实体的类型。 - name
string: 实体的名称。 - recordId
[number|string]: 对于无键实体则省略。 - options
[Object]: 保存选项。
saveEntityRecord
触发以保存实体记录的动作。
参数
- kind
string: 接收到的实体的类型。 - name
string: 接收到的实体的名称。 - record
Object: 要保存的记录。 - options
Object: 保存选项。 - options.isAutosave
[boolean]: 这是否是自动保存。 - options.__unstableFetch
[Function]: 仅供内部使用。替代apiFetch()调用的函数。必须返回一个 Promise。 - options.throwOnError
[boolean]: 如果为 false,此动作将抑制所有异常。默认为 false。
undo
触发以撤销对实体记录的最后一次编辑(如果有)的动作。
Selectors
以下选择器可在由 wp.data.select( 'core' ) 返回的对象上使用:
canUser
返回当前用户是否可以在给定的 REST 资源上执行给定的操作。
调用此方法可能会通过 canUser() 解析器向 REST API 触发 OPTIONS 请求。
https://developer.wordpress.org/rest-api/reference/
参数
- state
State: 数据状态。 - action
string: 要检查的操作。可选值:‘create’、‘read’、‘update’、‘delete’。 - resource
string | EntityResource: 要检查的实体资源。接受实体对象{ kind: 'postType', name: 'attachment', id: 1 }或作为字符串的 REST 基础路径 –media。 - id
EntityRecordKey: 可选的要检查的 REST 资源的 ID。
返回
boolean | undefined: 用户是否可以执行该操作,或者如果 OPTIONS 请求仍在进行中,则为undefined。
canUserEditEntityRecord
返回当前用户是否可以编辑给定的实体。
调用此方法可能会通过 canUser() 解析器向 REST API 触发 OPTIONS 请求。
https://developer.wordpress.org/rest-api/reference/
参数
- state
State: 数据状态。 - kind
string: 实体类型。 - name
string: 实体名称。 - recordId
EntityRecordKey: 记录的 ID。
返回
boolean | undefined: 用户是否可以编辑,或者如果 OPTIONS 请求仍在进行中,则为undefined。
getAuthors
已弃用 自 11.3 起。调用者应改用
select( 'core' ).getUsers({ who: 'authors' })。
返回所有可用的作者。
参数
- state
State: 数据状态。 - query
GetRecordsHttpQuery: 可选的查询参数字符对象,随请求一起包含。有关有效的查询参数,请参阅 REST API 手册中的用户页面,并查看列出用户和检索用户的参数。
返回
ET.User[]: 作者列表。
getAutosave
返回帖子和作者的自动保存版本。
参数
- state
State: 状态树。 - postType
string: 父帖子的类型。 - postId
EntityRecordKey: 父帖子的 ID。 - authorId
EntityRecordKey: 作者的 ID。
返回
EntityRecord | undefined: 帖子和作者的自动保存版本。
getAutosaves
返回帖子的最新自动保存版本。
由于后端为每个帖子的每个作者存储一个自动保存版本,因此可能返回多个自动保存版本。
参数
- state
State: 状态树。 - postType
string: 父帖子的类型。 - postId
EntityRecordKey: 父帖子的 ID。
返回
Array< any > | undefined: 帖子的自动保存版本数组,如果没有则为 undefined。
getBlockPatternCategories
检索注册的块模式类别列表。
参数
- state
State: 数据状态。
返回
Array< any >: 块模式类别列表。
getBlockPatterns
检索注册的块模式列表。
参数
- state
State: 数据状态。
返回
Array< any >: 块模式列表。
getCurrentTheme
返回当前主题。
参数
- state
State: 数据状态。
返回
any: 当前主题。
getCurrentThemeGlobalStylesRevisions
Deprecated 自 WordPress 6.5.0 起已弃用。调用者应改用
select( 'core' ).getRevisions( 'root', 'globalStyles', ${ recordKey } ),其中recordKey是全局样式父级帖子的 ID。
返回当前全局样式的修订版本。
参数
- state
State: 数据状态。
返回
Array< object > | null: 当前全局样式。
getCurrentUser
返回当前用户。
参数
- state
State: 数据状态。
返回
ET.User< 'view' >: 当前用户对象。
getDefaultTemplateId
返回用于渲染给定查询的默认模板。
参数
- state
State: 数据状态。 - query
TemplateQuery: 查询。
返回
string: 给定查询的默认模板 ID。
getEditedEntityRecord
返回指定的实体记录,并与其实时编辑内容合并。
参数
- state
State: 状态树。 - kind
string: 实体类型。 - name
string: 实体名称。 - recordId
EntityRecordKey: 对于无键实体可省略。
返回
ET.Updatable< EntityRecord > | false: 实体记录,与其编辑内容合并。
getEmbedPreview
返回给定 URL 的嵌入预览。
参数
- state
State: 数据状态。 - url
string: 嵌入 URL。
返回
any: 如果尚未获取预览,则返回未定义;否则,返回从嵌入预览 API 获取的预览。
getEntitiesByKind
Deprecated 自 WordPress 6.0 起已弃用。请改用 getEntitiesConfig
返回给定类型的已加载实体。
参数
- state
State: 数据状态。 - kind
string: 实体类型。
返回
Array< any >: 配置与类型匹配的实体数组。
getEntitiesConfig
返回给定类型的已加载实体。
参数
- state
State: 数据状态。 - kind
string: 实体类型。
返回
Array< any >: 配置与类型匹配的实体数组。
getEntity
Deprecated 自 WordPress 6.0 起已弃用。请改用 getEntityConfig
根据其类型和名称返回实体配置。
参数
- state
State: 数据状态。 - kind
string: 实体类型。 - name
string: 实体名称。
返回
any: 实体配置
getEntityConfig
根据其类型和名称返回实体配置。
参数
- state
State: 数据状态。 - kind
string: 实体类型。 - name
string: 实体名称。
返回
any: 实体配置
getEntityRecord
通过键返回实体的记录对象。如果值尚未接收,则返回 null;如果已知实体不存在,则返回 undefined;如果存在且已接收,则返回实体对象。
参数
- state
State: 状态树 - kind
string: 实体类型。 - name
string: 实体名称。 - recordId
EntityRecordKey: 对于无键实体可省略。 - query
GetRecordsHttpQuery: 可选查询。如果请求特定字段,字段必须始终包含 ID。有关有效的查询参数,请参阅 REST API Handbook 中的 Reference 并选择实体类型。然后查看“检索 [实体类型]”可用的参数。
返回
EntityRecord | undefined: 记录。
getEntityRecordEdits
返回指定实体记录的编辑内容。
参数
- state
State: 状态树。 - kind
string: 实体类型。 - name
string: 实体名称。 - recordId
EntityRecordKey: 对于无键实体可省略。
返回
Optional< any >: 实体记录的编辑内容。
getEntityRecordNonTransientEdits
返回指定实体记录的非临时编辑内容。
临时编辑不会创建撤销级别,也不用于更改检测。它们在实体的配置中定义。
参数
- state
State: 状态树。 - kind
string: 实体类型。 - name
string: 实体名称。 - recordId
EntityRecordKey: 对于无键实体可省略。
返回
Optional< any >: 实体记录的非临时编辑内容。
getEntityRecords
返回实体的记录。
参数
- state
State: 状态树 - kind
string: 实体类型。 - name
string: 实体名称。 - query
GetRecordsHttpQuery: 可选术语查询。如果请求特定字段,字段必须始终包含 ID。有关有效的查询参数,请参阅 REST API Handbook 中的 Reference 并选择实体类型。然后查看“列出 [实体类型]s”可用的参数。
返回
EntityRecord[] | null: 记录。
getEntityRecordsTotalItems
返回给定查询的实体总可用记录数(忽略分页)。
参数
- state
State: 状态树 - kind
string: 实体类型。 - name
string: 实体名称。 - query
GetRecordsHttpQuery: 可选术语查询。如果请求特定字段,字段必须始终包含 ID。有关有效的查询参数,请参阅 REST API Handbook 中的 Reference 并选择实体类型。然后查看“列出 [实体类型]s”可用的参数。
返回
number | null: number | null。
getEntityRecordsTotalPages
返回给定查询的可用页数。
参数
- state
State: 状态树 - kind
string: 实体类型。 - name
string: 实体名称。 - query
GetRecordsHttpQuery: 可选术语查询。如果请求特定字段,字段必须始终包含 ID。有关有效的查询参数,请参阅 REST API Handbook 中的 Reference 并选择实体类型。然后查看“列出 [实体类型]s”可用的参数。
返回
number | null: number | null。
getLastEntityDeleteError
返回指定实体记录的最后一次删除错误。
参数
- state
State: 状态树。 - kind
string: 实体类型。 - name
string: 实体名称。 - recordId
EntityRecordKey: 记录 ID。
返回
any: 实体记录的保存错误。
getLastEntitySaveError
返回指定实体记录的最后一次保存错误。
参数
- state
State: 状态树。 - kind
string: 实体类型。 - name
string: 实体名称。 - recordId
EntityRecordKey: 对于无键实体可省略。
返回
any: 实体记录的保存错误。
getRawEntityRecord
通过键返回实体的记录对象,其属性映射为原始值。
参数
- state
State: 状态树。 - kind
string: 实体类型。 - name
string: 实体名称。 - recordId
EntityRecordKey: 对于无键实体可省略。
返回
EntityRecord | undefined: 具有实体原始属性的对象。
getRedoEdit
Deprecated 自 6.3 起已弃用
如果存在,返回实体记录编辑历史记录中当前撤销偏移量的下一次编辑。
参数
- state
State: 状态树。
返回
Optional< any >: 编辑内容。
getReferenceByDistinctEdits
当编辑值发生变化时返回一个新的引用。通过严格相等性比较返回值,这对于推断在状态之间进行了哪些编辑非常有用。
用法
const hasEditOccurred = (
getReferenceByDistinctEdits( beforeState ) !==
getReferenceByDistinctEdits( afterState )
);
参数
- state 编辑器状态。
返回
- 一个仅在发生编辑时才改变引用的值。
getRevision
返回父实体的单个特定修订版本。
参数
- state
State: 状态树 - kind
string: 实体类型。 - name
string: 实体名称。 - recordKey
EntityRecordKey: 您要获取其修订版本的实体记录的键。 - revisionKey
EntityRecordKey: 修订版本的键。 - query
GetRecordsHttpQuery: 可选查询。如果请求特定字段,字段必须始终包含 ID。有关有效的查询参数,请参阅 REST API 手册 中的修订版本 schema。然后查看“检索 [实体类型]”中可用的参数。
返回
RevisionRecord | Record< PropertyKey, never > | undefined: 记录。
getRevisions
返回实体的修订版本。
参数
- state
State: 状态树 - kind
string: 实体类型。 - name
string: 实体名称。 - recordKey
EntityRecordKey: 您要获取其修订版本的实体记录的键。 - query
GetRecordsHttpQuery: 可选查询。如果请求特定字段,字段必须始终包含 ID。有关有效的查询参数,请参阅 REST API 手册 中的修订版本 schema。然后查看“检索 [实体类型]”中可用的参数。
返回
RevisionRecord[] | null: 记录。
getThemeSupports
返回索引中的主题支持数据。
参数
- state
State: 数据状态。
返回
any: 索引数据。
getUndoEdit
已弃用 自 6.3 起
如果存在,则从当前撤销偏移量返回实体记录编辑历史中的上一次编辑。
参数
- state
State: 状态树。
返回
Optional< any >: 编辑内容。
getUserPatternCategories
检索已注册的用户图案分类。
参数
- state
State: 数据状态。
返回
Array< UserPatternCategory >: 用户图案分类数组。
getUserQueryResults
返回由查询 ID 返回的所有用户。
参数
- state
State: 数据状态。 - queryID
string: 查询 ID。
返回
ET.User< 'edit' >[]: 用户列表。
hasEditsForEntityRecord
如果指定的实体记录有编辑,则返回 true,否则返回 false。
参数
- state
State: 状态树。 - kind
string: 实体类型。 - name
string: 实体名称。 - recordId
EntityRecordKey: 对于无键实体可省略。
返回
boolean: 实体记录是否有编辑。
hasEntityRecord
如果为给定的一组参数收到了记录,则返回 true,否则返回 false。
注意:如果本地状态中不可用,此操作不会触发从 API 获取实体记录的请求。
参数
- state
State: 状态树 - kind
string: 实体类型。 - name
string: 实体名称。 - recordId
EntityRecordKey: 对于无键实体可省略。 - query
GetRecordsHttpQuery: 可选查询。
返回
boolean: 是否已收到实体记录。
hasEntityRecords
如果为给定的一组参数收到了记录,则返回 true,否则返回 false。
参数
- state
State: 状态树 - kind
string: 实体类型。 - name
string: 实体名称。 - query
GetRecordsHttpQuery: 可选术语查询。有关有效的查询参数,请参阅 REST API 手册中的 参考 并选择实体类型。然后查看“列出 [实体类型]s”中可用的参数。
返回
boolean: 是否已收到实体记录。
hasFetchedAutosaves
如果自动保存的 REST 请求已完成,则返回 true。
参数
- state
State: 状态树。 - postType
string: 父帖子的类型。 - postId
EntityRecordKey: 父帖子的 ID。
返回
boolean: 如果 REST 请求已完成则为 true。否则为 false。
hasRedo
如果实体记录编辑历史的当前撤销偏移量之后还有下一次编辑,则返回 true,否则返回 false。
参数
- state
State: 状态树。
返回
boolean: 是否存在下一次编辑。
hasRevision
如果为给定的一组参数收到了修订版本,则返回 true,否则返回 false。
注意:如果本地状态中不可用,这不会触发从 API 获取修订版本的请求。
参数
- state
State: 状态树 - kind
string: 实体类型。 - name
string: 实体名称。 - recordKey
EntityRecordKey: 您要检查其修订版本的实体记录的键。 - revisionKey
EntityRecordKey: 修订版本的键。 - query
GetRecordsHttpQuery: 可选查询。
返回
boolean: 是否已收到修订版本。
hasUndo
如果实体记录编辑历史的当前撤销偏移量之前还有上一次编辑,则返回 true,否则返回 false。
参数
- state
State: 状态树。
返回
boolean: 是否存在上一次编辑。
isAutosavingEntityRecord
如果指定的实体记录正在自动保存,则返回 true,否则返回 false。
参数
- state
State: 状态树。 - kind
string: 实体类型。 - name
string: 实体名称。 - recordId
EntityRecordKey: 记录 ID。
返回
boolean: 实体记录是否正在自动保存。
isDeletingEntityRecord
如果指定的实体记录正在删除,则返回 true,否则返回 false。
参数
- state
State: 状态树。 - kind
string: 实体类型。 - name
string: 实体名称。 - recordId
EntityRecordKey: 记录 ID。
返回
boolean: 实体记录是否正在删除。
isPreviewEmbedFallback
确定返回的预览是否为 oEmbed 链接回退。
WordPress 可以配置为在 URL 不可嵌入时返回一个简单的 URL 链接。我们需要能够根据从 oEmbed 预览 API 返回的内容来确定 URL 是否可嵌入。
参数
- state
State: 数据状态。 - url
string: 嵌入 URL。
返回
boolean: URL 的预览是否为 oEmbed 链接回退。
isRequestingEmbedPreview
如果正在进行嵌入预览数据的请求,则返回 true,否则返回 false。
参数
- state
State: 数据状态。 - url
string: 预览将针对的 URL。
返回
boolean: 是否正在进行嵌入预览的请求。
isSavingEntityRecord
如果指定的实体记录正在保存,则返回 true,否则返回 false。
参数
- state
State: 状态树。 - kind
string: 实体类型。 - name
string: 实体名称。 - recordId
EntityRecordKey: 对于无键实体可省略。
返回
boolean: 实体记录是否正在保存。
Hooks
以下是一组可从 @wordpress/core-data 包导入的 React hooks:
useEntityBlockEditor
返回指定类型最近提供的实体的块内容 getter 和 setter 的 Hook。
返回值结构为 [ blocks, onInput, onChange ]。onInput 用于不创建撤销级别或不使帖子变脏的块更改(非持久性更改),而 onChange 用于持久性更改。它们直接映射到 BlockEditorProvider 的 props,旨在与其或类似的组件或 hooks 一起使用。
参数
- kind
string: 实体类型。 - name
string: 实体名称。 - options
Object: - options.id
[string]: 要使用的实体 ID,替代上下文提供的 ID。
返回
[unknown[], Function, Function]: 块数组和 setter。
useEntityId
返回指定类型最近提供的实体的 ID 的 Hook。
参数
- kind
string: 实体类型。 - name
string: 实体名称。
useEntityProp
返回指定类型最近提供的实体的指定属性的值及其 setter 的 Hook。
参数
- kind
string: 实体类型。 - name
string: 实体名称。 - prop
string: 属性名称。 - _id
[number|string]: 要使用的实体 ID,替代上下文提供的 ID。
返回
[*, Function, *]: 一个数组,其中第一项是属性值,第二项是 setter,第三项是来自 REST API 的完整值对象,包含更多信息,如raw、rendered和protected属性。
useEntityRecord
解析指定的实体记录。
用法
import { useEntityRecord } from '@wordpress/core-data';
function PageTitleDisplay( { id } ) {
const { record, isResolving } = useEntityRecord( 'postType', 'page', id );
if ( isResolving ) {
return 'Loading...';
}
return record.title;
}
// Rendered in the application:
// <PageTitleDisplay id={ 1 } />
在上面的示例中,当 PageTitleDisplay 渲染到应用中时,页面数据和解析详情将使用 getEntityRecord() 从 store 状态中检索,如果缺失则进行解析。
import { useCallback } from 'react';
import { useDispatch } from '@wordpress/data';
import { __ } from '@wordpress/i18n';
import { TextControl } from '@wordpress/components';
import { store as noticeStore } from '@wordpress/notices';
import { useEntityRecord } from '@wordpress/core-data';
function PageRenameForm( { id } ) {
const page = useEntityRecord( 'postType', 'page', id );
const { createSuccessNotice, createErrorNotice } =
useDispatch( noticeStore );
const setTitle = useCallback(
( title ) => {
page.edit( { title } );
},
[ page.edit ]
);
if ( page.isResolving ) {
return 'Loading...';
}
async function onRename( event ) {
event.preventDefault();
try {
await page.save();
createSuccessNotice( __( 'Page renamed.' ), {
type: 'snackbar',
} );
} catch ( error ) {
createErrorNotice( error.message, { type: 'snackbar' } );
}
}
return (
<form onSubmit={ onRename }>
<TextControl
label={ __( 'Name' ) }
value={ page.editedRecord.title }
onChange={ setTitle }
/>
<button type="submit">{ __( 'Save' ) }</button>
</form>
);
}
// Rendered in the application:
// <PageRenameForm id={ 1 } />
在上面的示例中,更新和保存页面标题由 useEntityRecord() 提供的 edit() 和 save() 突变辅助函数处理;
参数
- kind
string: 实体类型,例如root或postType。有关可用类型的列表,请参阅 ../entities.ts 中的 rootEntitiesConfig。 - name
string: 实体名称,例如plugin或post。有关可用名称的列表,请参阅 ../entities.ts 中的 rootEntitiesConfig。 - recordId
string | number: 请求的实体记录的 ID。 - options
Options: 可选的 hook 选项。
返回
EntityRecordResolution< RecordType >: 实体记录数据。
更新日志
6.1.0 在 WordPress 核心中引入。
useEntityRecords
解析指定的实体记录。
用法
import { useEntityRecords } from '@wordpress/core-data';
function PageTitlesList() {
const { records, isResolving } = useEntityRecords( 'postType', 'page' );
if ( isResolving ) {
return 'Loading...';
}
return (
<ul>
{ records.map( ( page ) => (
<li>{ page.title }</li>
) ) }
</ul>
);
}
// Rendered in the application:
// <PageTitlesList />
在上面的示例中,当 PageTitlesList 渲染到应用中时,记录列表和解析详情将使用 getEntityRecords() 从 store 状态中检索,如果缺失则进行解析。
参数
- kind
string: 实体类型,例如root或postType。有关可用类型的列表,请参阅 ../entities.ts 中的 rootEntitiesConfig。 - name
string: 实体名称,例如plugin或post。有关可用名称的列表,请参阅 ../entities.ts 中的 rootEntitiesConfig。 - queryArgs
Record< string, unknown >: 可选的 HTTP 查询描述,用于说明如何获取数据,传递给请求的 API 端点。 - options
Options: 可选的 hook 选项。
返回
EntityRecordsResolution< RecordType >: 实体记录数据。
更新日志
6.1.0 在 WordPress 核心中引入。
useResourcePermissions
解析资源权限。
用法
import { useResourcePermissions } from '@wordpress/core-data';
function PagesList() {
const { canCreate, isResolving } = useResourcePermissions( {
kind: 'postType',
name: 'page',
} );
if ( isResolving ) {
return 'Loading ...';
}
return (
<div>
{ canCreate ? <button>+ Create a new page</button> : false }
// ...
</div>
);
}
// Rendered in the application:
// <PagesList />
import { useResourcePermissions } from '@wordpress/core-data';
function Page( { pageId } ) {
const { canCreate, canUpdate, canDelete, isResolving } =
useResourcePermissions( {
kind: 'postType',
name: 'page',
id: pageId,
} );
if ( isResolving ) {
return 'Loading ...';
}
return (
<div>
{ canCreate ? <button>+ Create a new page</button> : false }
{ canUpdate ? <button>Edit page</button> : false }
{ canDelete ? <button>Delete page</button> : false }
// ...
</div>
);
}
// Rendered in the application:
// <Page pageId={ 15 } />
在上面的示例中,当 PagesList 渲染到应用中时,适当的权限和解析详情将使用 canUser() 从 store 状态中检索,如果缺失则进行解析。
参数
- resource
string | EntityResource: 要检查的实体资源。接受实体对象{ kind: 'postType', name: 'attachment', id: 1 }或作为字符串的 REST 基础路径 –media。 - id
IdType: 可选的要检查的资源 ID,例如 10。注意:当使用实体对象作为资源来检查权限时,不建议使用此参数,它将被忽略。
返回
ResourcePermissionsResolution< IdType >: 实体记录数据。
更新日志
6.1.0 在 WordPress 核心中引入。
WithPermissions
实用程序类型,可为任何记录类型添加权限。
为此包做出贡献
这是 Gutenberg 项目的一部分独立包。该项目组织为一个 monorepo。它由多个自包含的软件包组成,每个包都有特定的用途。此 monorepo 中的包发布到 npm,并被 WordPress 以及其他软件项目使用。
要了解有关为此包或整个 Gutenberg 做出贡献的更多信息,请阅读项目的主 贡献者指南。