结构化数据存储 (wc/store/schema)
概述
结构化数据存储管理与 WooCommerce Blocks 相关的路由,从而能够高效地检索和更新给定命名空间的路由数据。 此存储简化了与资源路由的交互,确保模块可以根据需要轻松访问端点路径。
用法
要使用此存储,您需要在任何引用它的模块中导入 SCHEMA_STORE_KEY。 假设 @woocommerce/block-data 已注册为指向 wc.wcBlocksData 的外部,您可以通过以下方式导入密钥:
const { SCHEMA_STORE_KEY } = window.wc.wcBlocksData;
操作
⚠️ 您通常不需要直接使用这些操作,因为它们主要由解析器在内部使用。
receiveRoutes(routes, namespace)
此操作返回一个对象,用于使用提供的资源路由列表更新存储。
参数
routesarray: 针对给定命名空间的路由数组,例如:[ '/wc/blocks/products', '/wc/blocks/products/attributes/(?P<id>[\d]+)' ]。namespacestring: 路由所属的命名空间,例如:/wc/blocks。
返回值
object: 一个操作对象,用于使用提供的资源路由列表更新存储,具有以下键:typestring: 操作类型。routesobject: 路由对象的集合,以路由名称作为键。namespacestring: 路由所属的命名空间,例如:/wc/blocks。
选择器
getRoute(state, namespace, resourceName, ids = [])
此方法用于检索给定命名空间、资源名称和(如果需要)ID 的路由。
参数
stateobject: 原始状态。namespacestring: 路由的命名空间,例如:/wc/blocks。resourceNamestring: 请求的资源,例如:products/attributes/terms。idsarray: 仅当路由包含 ID 占位符时才需要。
返回值
string: 如果路由可用,则返回该路由。
示例
如果您正在查找 wc/blocks 命名空间中单个产品的路由,则 ids 将为 [ 20 ]:
// '/wc/blocks/products/20'
wp.data.select( SCHEMA_STORE_KEY ).getRoute( '/wc/blocks', 'products', [ 20 ] );
getRoutes(state, namespace)
此方法将返回给定命名空间的所有已注册路由,并将其作为扁平数组返回。
参数
stateobject: 当前状态。namespacestring: 要返回路由的命名空间。
返回值
array: 包含给定命名空间的所有路由的数组。
getRouteFromResourceEntries
此方法将从路由状态的给定切片中返回路由。
参数
stateSliceobject: 从给定命名空间和资源名称的路由状态切片。idsarray(默认:[]): 一个 ID 引用数组,这些 ID 将替换为路由占位符。
返回值
string: 给定的资源条目的路由,如果未找到任何路由,则返回一个空字符串。
例子
const store = select( SCHEMA_STORE_KEY );
const route = store.getRouteFromResourceEntries( stateSlice, ids );
assembleRouteWithPlaceholders
此函数将返回带有占位符的组装后的路由。
参数
- route
string: 要组装的路由。 - routePlaceholders
array: 路由占位符的数组。 - ids
array: 要在路由占位符中替换的 ID 关键字的数组。
返回值
string: 组装后的路由,其中占位符已替换为实际的价值。
例子
const store = select( SCHEMA_STORE_KEY );
const route = store.assembleRouteWithPlaceholders( route, routePlaceholders, ids );