我有一个前端带有服务器端渲染的简单块。
PHP:
register_block_type( \'some/block\', array(
\'render_callback\' => \'render_my_block\',
\'attributes\' => array(
\'stuff\' => array(
)
)
));
function render_my_block( $attributes ) {
// $attributes[\'stuff\']
return \'<h1>Hello frontend</h1>\';
}
这是可行的,但我还需要在管理区域将其呈现为预览,因此我添加了JS:
registerBlockType( \'some/block\', {
title: \'Some block\',
attributes: {
stuff : {
}
},
edit( { className, attributes, setAttributes } ) {
return (
<Fragment>
<SomeInput />
<SomeOtherInput />
<Preview>
// I need to get contents of PHP function render_my_block here,
// based on current attributes.stuff
</Preview>
</Fragment>
);
},
save( { attributes } ) {
return null; // server side
}
} );
我的问题是——获取这些数据的正确方法是什么?我应该使用
wp_ajax_
回调/筛选?或者古腾堡有更好的方法来处理这个问题?
我已经检查了默认的“最新帖子”块的工作原理——它使用Rest API获取帖子ID和标题,然后通过react呈现它们。但对于我的情况,我只需要返回简单的HTML字符串。
最合适的回答,由SO网友:brianjohnhanna 整理而成
如果希望这样做,则需要使用<ServerSideRender />
中的组件edit
方法
这是一个基于您提供的PHP块注册代码的基本实现。
import { ServerSideRender } from \'@wordpress/components\';
registerBlockType( \'some/block\', {
title: \'Some block\',
attributes: {
stuff : {
}
},
edit( { className, attributes, setAttributes } ) {
return (
<Fragment>
<SomeInput />
<SomeOtherInput />
<ServerSideRender
block="some/block"
attributes={ {
stuff: attributes.stuff
} }
/>
</Fragment>
);
},
save( { attributes } ) {
return null; // server side
}
} );
The
<ServerSideRender />
组件将允许您调用
render_callback
最初在编辑模板中用PHP注册块时提供。这个
attributes
传递给组件的对象将作为传递给回调的唯一函数参数提供。
全面披露WP Codex says this 关于使用<ServerSideRender />
组成部分:
服务器端渲染是指回退;总是首选JavaScript中的客户端渲染(客户端渲染速度更快,允许更好的编辑器操作)。