gpt4 book ai didi

reactjs - 使用 Webpack 进行初始静态 React HTML 渲染

转载 作者:行者123 更新时间:2023-12-03 13:18:53 25 4
gpt4 key购买 nike

有没有办法直接在 HTML 入口点中预先生成(单路由)React 应用程序的 HTML 结构?

然后页面将能够在加载任何 JS 之前显示 HTML(基于 React 初始状态)。

我实际上正在使用webpack-html-loader但欢迎任何其他加载器或插件;)

PS:5月static-site-generator-webpack-plugin有什么帮助吗?

PS:我没有使用 React Router

最佳答案

如果您想使用static-site-generator-webpack-plugin你首先需要使用 webpack bundle.js 构建一个包导出一个带有以下参数的渲染函数。

  • locals具有各种页面元数据的对象,例如title进入组件参数(传统上被认为是模板变量)。
  • callback Nodejs风格(err, result)您将使用渲染的 html 作为 result 的值调用该回调

例如

// entry.js, compiled to bundle.js by webpack

module.exports = function render(locals, callback) {
callback(null,
'<html>' + locals.greet + ' from ' + locals.path + '</html>');
};

在此函数中,您将实例化您的组件(如果需要,可以通过 React Router)并使用 ReactDOMServer.renderToString() 渲染它们。 .

然后您将指定编译后的 bundle.jsbundleStaticSiteGeneratorPlugin 的实例化中以及你的具体路线paths并在 locals包含上述元数据值的对象。

var paths, locals; // compute paths from metadata files or frontmatter

module.exports = {
entry: {
bundle: './entry.js' // build bundle.js from entry.js source
},
...,
plugins: [
new StaticSiteGeneratorPlugin('bundle', paths, locals)
]
}

您为locals指定的键在webpack.config.js将出现在locals中每次调用 render(locals, callback) 的参数。它们将与 path 合并, assetswebpackStats插件提供的 key 。

如果您想在渲染后将 javascript 代码加载到页面中,您可以编译一个额外的 page.js调用 ReactDOM.render() 的 webpack 配置条目以典型方式,然后将该包加载到 script 中您的 render(locals, callback) 中发出的标签在您的 bundle.js 中运行(多于)。确保page.js将组件安装到 DOM 中与 entry.js 渲染时相同的位置(您可能会在父元素上设置 id 属性)。您还需要确保任何位置(即路由路径)因变量在两个环境中对齐。

查看Gatsby的源代码也使用这个插件。您还可以查看 Phenomic 的源代码寻找替代方法。

关于reactjs - 使用 Webpack 进行初始静态 React HTML 渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42011434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com