Получить информацию и атрибуты из других блоков Гутенберга
Можно ли получить информацию, такую как атрибуты блока, из других блоков из вызова registerBlockType?
Например, если у меня есть блок с InnerBlocks в качестве содержимого, возможно ли получить атрибуты из блоков внутри этого InnerBlocks, или наоборот?
2 ответа
Да, это возможно, если вы управляете собственным магазином в Гутенберге, который на самом деле является магазином Redux. @ WordPress/ данные
Рекомендуется хранить логику нескольких блоков отдельно в их собственных атрибутах (поэтому они являются блоками). В целях повторного использования вы можете создавать компоненты React, которые можно использовать внутри разных блоков, таким образом, атрибуты вашего блока могут быть переданы в подпорки компонента React.
Вы также можете использовать Block context для достижения этой цели.
В своем родительском блоке сопоставьте атрибут, который вы хотите использовать в своем дочернем блоке, используя
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'],
// ...
}
В вашем дочернем блоке
edit
а также
save
методы, вы можете получить доступ к контексту следующим образом:
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>
);
}
// ...
}