ServerSideRender 是一个组件,用于在服务器端渲染动态区块的预览,以显示在编辑器中。在区块的 edit 函数中使用服务器端渲染时,应仅限于严重依赖现有 PHP 渲染逻辑、且该逻辑与数据高度耦合的区块,尤其是在没有可用端点的情况下。
当旧版区块作为向后兼容措施提供时,也可以使用 ServerSideRender,而无需重写该区块可能依赖的已弃用代码。
ServerSideRender 应被视为一种回退或遗留机制,不适合基于它开发新功能。
新区块应与任何必要的 REST API 端点一起构建,以便可以在 edit 函数中使用 JavaScript 进行客户端渲染。这能提供最佳用户体验,而不是依赖使用 PHP render_callback。渲染所需的逻辑应包含在端点中,从而使客户端 JavaScript 与服务器端 PHP 逻辑之间的差异最小。
此包仅用于 WordPress 核心。欢迎在你自己的项目中使用它,但请注意它可能永远不会拥有完整文档。
安装
安装模块
npm install @wordpress/server-side-render --save
此包假定你的代码将在 ES2015+ 环境中运行。如果你使用的环境对此类语言特性和 API 的支持有限或完全不支持,则应在你的代码中包含 @wordpress/babel-preset-default 附带的 polyfill。
API
default
已弃用 请改用
ServerSideRender非默认导出。
用于在使用 wp 全局命名空间时兼容 ServerSideRender 组件的兼容层。
用法
import ServerSideRender from '@wordpress/server-side-render';
ServerSideRender
一个为区块渲染服务器端内容的组件。
注意:在适用时,URL 查询将包含当前文章 ID。这对于依赖当前文章上下文进行渲染的区块很有用。
用法
import { ServerSideRender } from '@wordpress/server-side-render';
// WordPress 6.8 及更早版本的旧版导入
// import { default as ServerSideRender } from '@wordpress/server-side-render';
function Example() {
return (
<ServerSideRender
block="core/archives"
attributes={ { showPostCounts: true } }
urlQueryArgs={ { customArg: 'value' } }
className="custom-class"
/>
);
}
参数
- props
ServerSideRenderWithPostIdProps:组件属性。 - props.urlQueryArgs
ServerSideRenderWithPostIdProps[ 'urlQueryArgs' ]:要附加到请求 URL 的额外查询参数。
返回值
- 已渲染的服务器端内容。
useServerSideRender
一个用于在服务器端渲染动态区块预览以显示在编辑器中的 Hook。
处理获取区块的服务器端渲染预览、管理加载状态,并自动对请求进行防抖,以防止过多的 API 调用。它支持 GET 和 POST 请求,其中 POST 请求用于较大的属性负载。
用法
基本用法:
import { RawHTML } from '@wordpress/element';
import { useServerSideRender } from '@wordpress/server-side-render';
function MyServerSideRender( { attributes, block } ) {
const { content, status, error } = useServerSideRender( {
attributes,
block,
} );
if ( status === 'loading' ) {
return <div>Loading...</div>;
}
if ( status === 'error' ) {
return <div>Error: { error }</div>;
}
return <RawHTML>{ content }</RawHTML>;
}
参数
- args
UseServerSideRenderArgs:Hook 配置对象。
返回值
ServerSideRenderResponse:服务器端渲染响应对象。
输出
输出使用在定义区块时设置的区块 render_callback 函数。
API 端点
用于获取 ServerSideRender 输出的 API 端点是 /wp/v2/block-renderer/:block。它会使用区块的 render_callback 方法。
如果你向 ServerSideRender 传递 attributes,则该区块还必须已注册,并且其属性已在 PHP 中定义。
register_block_type(
'core/archives',
array(
'api_version' => 3,
'attributes' => array(
'showPostCounts' => array(
'type' => 'boolean',
'default' => false,
),
'displayAsDropdown' => array(
'type' => 'boolean',
'default' => false,
),
),
'render_callback' => 'render_block_core_archives',
)
);
为此包做出贡献
这是 Gutenberg 项目中的一个独立包。该项目以 monorepo 形式组织,由多个自包含的包组成,每个包都有特定用途。此 monorepo 中的包发布到 npm,并由 WordPress 以及其他软件项目使用。
要了解有关为此包或整个 Gutenberg 做出贡献的更多信息,请阅读项目的主要 贡献者指南。