与其使用原始DOM节点,不如使用WP元素包装器组件并使用wp scripts
例如,下面是一个使用现代JS的ESNext块:
edit() {
return (
<div style={ blockStyle }>
Hello World, step 1 (from the editor).
</div>
);
},
再次使用未经构建步骤的原始JS:
( function( blocks, i18n, element ) {
var el = element.createElement;
....
edit: function() {
return el(
\'p\',
{ style: blockStyle },
\'Hello World, step 1 (from the editor).\'
);
},
...
} )( window.wp.blocks, window.wp.i18n, window.wp.element );
下面是使用现代JS时编辑功能的样子:
edit: function( props ) {
const data = wp.data.select( \'core/block-editor\' );
const blocks = data.getBlocks();
setHeadingAnchors(blocks);
const headings = blocks.map( ( item, index ) => {
if ( item.name === \'core/heading\' ) {
return null;
}
return <li>{item.attributes.content}</li>;
} );
return <div>
<h2>{ __( \'Table of Contents\', \'simpletoc\' ) }</h2>
<ul>
{headings}
</ul>
</div>;
},
然后我们可以使用
wp scripts
要构建它:
https://github.com/WordPress/gutenberg-examples/blob/master/01-basic-esnext/package.json#L19-L22
因此,它将构建脚本并处理所有JSX,并确保它使用WordPress元素包装器(否则必须使用
el( \'p\'
等等,它甚至会给你
PHP file that returns an array of JS dependencies 对于
wp_enqueue_script
这样,您构建的JS将保持超级精简,并在编辑器中的正确时间加载
旁注:
item[\'name\']
会给你带来麻烦,item
是对象,不是数组缩进!正确且一致地缩进看起来您有一个函数setHeadingAnchors
这会干涉其他块的事务,我建议不要这样做,你也应该在save函数中使用这段代码,你的PHP唯一需要做的就是让JS排队,并确保加载前端所需的任何资产