0

是否可以从 registerBlockType 调用中的其他块获取信息,例如块属性?

例如,如果我有一个以 InnerBlocks 作为内容的块,是否可以从该 InnerBlocks 内的块中获取属性,反之亦然?

4

2 回答 2

1

是的,如果您在 Gutenberg 内管理自己的商店,这实际上是一个 Redux 商店,那么这是可能的。@wordpress/数据

建议将多个块的逻辑分别保存在它们自己的属性中(这就是它们是块的原因)。出于可重用性的目的,您可以制作可在不同块内使用的 React 组件,这样您的块的属性可以传递给 React 组件的 props。

于 2019-02-22T19:41:09.110 回答
0

您也可以使用块上下文来实现这一点。

在您的父块中,使用 映射您要在子块中使用的属性providesContext。因此,如果您想映射recordId属性,您的父块配置将如下所示:

registerBlockType('my-plugin/parent-block', {
  // ...

  attributes: {
    recordId: {
      type: 'number',
    },
  },
 
  providesContext: {
    'my-plugin/recordId': 'recordId',
  },

  // ...
}

然后,子块可以通过将以useContext下行添加到您的子块配置来“使用”上下文:

registerBlockType('my-plugin/child-block', {
  // ...

  usesContext: ['my-plugin/recordId'],

  // ...
}

在您的子块editsave方法中,您可以像这样访问上下文:

registerBlockType('my-plugin/child-block', {
  // ...

  edit(props) {
    const { context } = props;
    const { "my-plugin/recordId": recordId } = context;

    return (
      <p>{ recordId }</p>
    );
  },

  save(props) {
    const { context } = props;
    const { "my-plugin/recordId": recordId } = context;

    return (
      <p>{ recordId }</p>
    );
  }

  // ...
}
于 2022-01-27T22:12:58.133 回答