看起来是最外面的<Fragment>
是罪魁祸首。但我还是不明白为什么!将其替换为<div>
修复了它。
如果你在WordPress 5.6.0, 您不需要更换<Fragment>
具有<div>
. :)
这是因为WordPress 5.6.0实际上block API version 2 引入了一个名为useBlockProps
应该在block\'s edit()
and save()
functions — 你可以在我提供的链接上阅读更多内容,但基本上useBlockProps
, 你可以使用Fragment
作为最外层的包装。
基于1的工作示例here:
import { registerBlockType } from \'@wordpress/blocks\';
import { useBlockProps, RichText } from \'@wordpress/block-editor\';
import { Fragment } from \'@wordpress/element\';
registerBlockType( \'my-plugin/foo-block\', {
// Required; use the block API version 2
apiVersion: 2,
title: \'Foo Block\',
category: \'design\',
attributes: {
content: {
type: \'array\',
source: \'children\',
selector: \'p\',
},
},
// In edit(), use useBlockProps()
edit: ( props ) => {
const { attributes: { content }, setAttributes, className } = props;
const blockProps = useBlockProps();
const onChangeContent = ( newContent ) => {
setAttributes( { content: newContent } );
};
return (
<Fragment>
<div className={ blockProps.className }>
<RichText
{ ...blockProps }
tagName="p"
onChange={ onChangeContent }
value={ content }
/>
<p>{ \'Back-end: \' + blockProps.className }</p>
</div>
</Fragment>
);
},
// In save(), use useBlockProps.save()
save: ( props ) => {
const blockProps = useBlockProps.save();
return (
<Fragment>
<div className={ blockProps.className }>
<RichText.Content
{ ...blockProps }
tagName="p"
value={ props.attributes.content }
/>
<p>{ \'Front-end: \' + blockProps.className }</p>
</div>
</Fragment>
);
},
} );
如上所述,为了获得额外的CSS类(以及其他/自动生成的CSS类),我使用
blockProps.className
而不是
props.className
这给了我们
undefined
.