【问题标题】:Rendering a React element to its initial HTML将 React 元素渲染为其初始 HTML
【发布时间】:2019-07-08 01:59:10
【问题描述】:

我正在尝试从服务器端的反应代码中提取初始 HTML。为此,我使用了官方的react-dom/server 库函数renderToStaticMarkup(),此处引用:https://reactjs.org/docs/react-dom-server.html#rendertostaticmarkup

我正在读取一个 react 源文件,使用 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 );
})();

此示例代码返回一个空字符串"",而不是预期的&lt;p&gt;Hello World!&lt;/p&gt;

【问题讨论】:

    标签: node.js reactjs server-side-rendering react-dom serverside-javascript


    【解决方案1】:

    我能够通过在评估的组件上使用React.createElement() 函数来解决这个问题。

        let result = renderToStaticMarkup( eval( code ) );
    

    应该是:

        let result = renderToStaticMarkup( React.createElement( eval( code ), { props } ) );
    

    【讨论】:

      猜你喜欢
      • 2017-04-01
      • 2014-07-30
      • 2018-01-15
      • 1970-01-01
      • 2012-09-21
      • 2017-06-20
      • 2022-01-25
      • 1970-01-01
      • 2021-09-28
      相关资源
      最近更新 更多