将React元素呈现为其初始HTML
我正在尝试从服务器端的反应代码中提取初始HTML。要做到这一点,我正在使用官方react-dom/server
库函数renderToStaticMarkup()
在这里引用:.html#rendertostaticmarkup
我正在阅读一个反应源文件,使用Babel将JSX和ES6语法转换为CommonJS,然后将评估的CommonJS解析为renderToStaticMarkup()
。
反应代码:
import React from 'react';
class Test extends React.Component {
render() {
return `<p>Hello World!</p>`;
}
}
export default Test;
服务器端代码:
const { renderToStaticMarkup } = require( 'react-dom/server');
const Babel = require( '@babel/core' );
const Fsp = require( 'fs' ).promises;
(async () => {
let fileContent = await Fsp.readFile( 'react.js', 'utf-8' );
let code = Babel.transform(
fileContent,
{
presets: [ '@babel/preset-env', '@babel/preset-react' ],
comments: false,
minified: true
}).code;
let result = renderToStaticMarkup( eval( code ) );
console.log( result );
})();
此示例代码返回空字符串""
而不是预期的<p>Hello World!</p>
我能够通过在评估的组件上使用React.createElement()
函数来解决这个问题。
let result = renderToStaticMarkup( eval( code ) );
应该:
let result = renderToStaticMarkup( React.createElement( eval( code ), { props } ) );
将React元素呈现为其初始HTML
我正在尝试从服务器端的反应代码中提取初始HTML。要做到这一点,我正在使用官方react-dom/server
库函数renderToStaticMarkup()
在这里引用:.html#rendertostaticmarkup
我正在阅读一个反应源文件,使用Babel将JSX和ES6语法转换为CommonJS,然后将评估的CommonJS解析为renderToStaticMarkup()
。
反应代码:
import React from 'react';
class Test extends React.Component {
render() {
return `<p>Hello World!</p>`;
}
}
export default Test;
服务器端代码:
const { renderToStaticMarkup } = require( 'react-dom/server');
const Babel = require( '@babel/core' );
const Fsp = require( 'fs' ).promises;
(async () => {
let fileContent = await Fsp.readFile( 'react.js', 'utf-8' );
let code = Babel.transform(
fileContent,
{
presets: [ '@babel/preset-env', '@babel/preset-react' ],
comments: false,
minified: true
}).code;
let result = renderToStaticMarkup( eval( code ) );
console.log( result );
})();
此示例代码返回空字符串""
而不是预期的<p>Hello World!</p>
我能够通过在评估的组件上使用React.createElement()
函数来解决这个问题。
let result = renderToStaticMarkup( eval( code ) );
应该:
let result = renderToStaticMarkup( React.createElement( eval( code ), { props } ) );