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 做出贡献的更多信息,请阅读项目的主 贡献者指南。