javascript - Express React Views - 如何手动渲染
问题描述
https://github.com/reactjs/express-react-views
我想使用这样的东西来呈现一些 html,但我根本没有在“网络服务器”的上下文中呈现我的 html——我根本不想将它连接到快速服务器。
我定期运行一些节点代码,应该将 html 输出到文件,所以我真正想要的是我可以调用这样的函数:
const html = renderTemplate({userName: 'George'});
它将userName
作为 React 道具传递给我设置的任何 express-react-view React 组件,并将 html 返回给我。
但是所有的示例和指南都展示了如何在 express.js 中将 express-react-views 设置为渲染引擎,而不仅仅是如果你想要一个独立的函数来渲染 html。
我也可以完全使用不同的包,这将允许我使用 React jsx 模板并将它们呈现为 html,而无需浏览器的上下文。
解决方案
我找到了答案
https://reactjs.org/docs/react-dom-server.html
https://medium.com/@remarkablemark/passing-props-in-a-universal-react-web-app-c52aca48c36b
npm 要求:
npm install react react-dom
npm install @babel/core @babel/register
npm install --save-dev @babel/preset-react
这是我的主节点文件,entry.js
require("@babel/register")({
presets: ["@babel/preset-react"]
});
const Index = require('./views/index.jsx');
var ReactDOMServer = require('react-dom/server');
var React = require('react');
var html = ReactDOMServer.renderToStaticMarkup(
React.createElement(Index, {title:'title'})
);
然后,在/views/index.jsx
:
var React = require('react');
var PropTypes = require('prop-types');
function countTo(n) {
var a = [];
for (var i = 0; i < n; i++) {
a.push(i + 1);
}
return a.join(', ');
}
class Index extends React.Component {
render() {
return (
<body>
<h1>{this.props.title}</h1>
<p>Welcome to {this.props.title}</p>
<p>
I can count to 10:
{countTo(10)}
</p>
</body>
);
}
}
Index.propTypes = {
title: PropTypes.string,
};
module.exports = Index;
推荐阅读
- python - PyCharm 环境 vs Matlab 环境?
- ssis - 如何在现有的 Excel 文件中为 SSIS 中的输出或目标文件创建工作表
- python - 如何快速查询 GCP 表
- javascript - 无法让 MiradorImageTools 插件工作
- java - Android 11,可以启动意图共享文件但文件未附加
- docker - 使用 docker-compose 将 Docker 映像部署到谷歌云运行
- python - 如何访问使用 conda 安装的 numpy
- html - 从 app.component.html 中删除图像会从另一个 component.html 文件中删除 html 元素
- asp.net-mvc - ASP.NET Core Image 上传 POST 请求到 API
- node.js - 使用聚合或使用 nodejs 和 mongoose 手动过滤数据是否更快?