【发布时间】:2015-06-06 10:58:27
【问题描述】:
我正在开发一个带有 express + react 的同构 javascript 应用程序。我们开始使用jade 作为静态内容的服务器端模板,但是将两者结合起来很快就变得笨拙了。我们最终得到了这样的结果:
在快速路线中:
router.get("/", function(req, res) {
var webpackStats = require('../../config/webpack-stats.json');
var reactHtml = React.renderToString(HiwApp({}));
var slideshowHtml = React.renderToString(slideshowApp({}));
var config = {
webpackStats: webpackStats,
reactOutput: reactHtml,
slideshowHtml: slideshowHtml
};
res.render("how_it_works/howitworks", config);
});
在翡翠中:
body
.company-logo.center
#react-main-mount
!= reactOutput
include ./content_block_1.jade
include ./content_block_2.jade
#slideshow-main-mount
!= slideshowHtml
这很脆弱——如果我们想要 jsx 然后是一个玉模板然后更多的 jsx,我们必须确保我们得到正确的顺序。
我的想法是全部使用 jsx。我知道这类事情有 React.renderToStaticMarkup ,但这并不能解决将动态页面与静态页面混合的问题。
最大的问题:如果我们决定使用 jsx 来完成所有这些工作(比如 layout.jsx 包含所有组件),然后调用 React.renderToString(App({});,这会对性能造成重大影响吗?如果是这样,有没有更好的方法来轻松组合静态和动态块?
【问题讨论】:
-
使用 Reacts
renderToString渲染整个文档完全没问题。初始页面加载渲染会受到惩罚,尽管它非常小。考虑到您最有可能构建一个 SP 应用程序,这确实是一个微不足道的问题,因为用户只访问一次初始页面构建。
标签: javascript node.js express pug reactjs