【发布时间】:2015-03-10 12:52:09
【问题描述】:
我目前正在启动我的第一个带有服务器端渲染的 React 应用程序。问题是我想选择最可靠的策略。
我目前正在尝试做的事情:
-
使用 Swig 作为 Express 应用程序的模板引擎并插入字符串化的 React 组件,如模板变量:
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>Title</title> </head> <body> <div id="react-mount">{{reactHTML|safe}}</div> <script src="/build/bundle.js"></script> </body> </html> 这是在服务器端和客户端都将 props 传递给组件的问题:
服务器
var Box = require('./src/components/Box.jsx');
function renderify (component, props) {
var reactHTML = React.renderToString(React.createElement(component, props));
return {reactHTML: reactHTML};
}
app.get('/', function (req, res) {
res.render('layout', renderify(Box, {name: 'My Box'}));
});
这完美呈现在服务器上,但客户端不知道我有name prop..
客户
var React = require('react');
var Box = require('./components/Box.jsx');
React.render(<Box />, document.getElementById('react-mount'));
这会从 React 向我发出警告,并在没有 name 的情况下重新呈现页面。
这里的另一个问题是路由。我认为当请求某些路由时最好在服务器上呈现应用程序,但我更愿意在用户通过应用程序时更改客户端位置。
这是否意味着在客户端和服务器上都应该复制路由?
那么根据您的经验,在服务器上渲染 React 组件的最佳策略是什么?
【问题讨论】:
标签: javascript node.js express render reactjs