【发布时间】:2016-08-19 17:45:02
【问题描述】:
首先页面由服务器渲染,然后在客户端/浏览器端,Javascript 脚本重新渲染整个页面!
我不认为这是应该的,因为它是非常糟糕的用户体验。
我注意到的一件事是,我的根元素的 data-reactid 属性由服务器呈现,是一些类似 .2t5ll4229s 的哈希值,所有子元素都将其作为前缀,例如.2t5ll4229s.0(第一个孩子)。而在浏览器端,data-reactid 对于根元素是 .0,对于第一个子元素是 .0.0。
如果data-reactid 真的是这里的罪魁祸首,有没有办法为客户端和服务器端设置一个像eric123 这样的选择值。
如果data-reactid 不是这里的罪魁祸首,我该如何让 React 的服务器端和客户端呈现无缝,即只有某些元素应该由客户端重新呈现,而不是全部!?
我的 index-server-local.html 模板:
...
<body>
<div id="content" class="container-fluid wrapper no-padding-left no-padding-right">
{{{reactHtml}}}
</div>
<script src="bundle.js"></script>
</body>
...
我的 server.js:
server.get('*', function (req, res) {
console.log('request url', req.url);
log.debug('routes are', JSON.stringify(routes));
res.header("Access-Control-Allow-Origin", "*");
match({routes, location: req.url}, (error, redirectLocation, renderProps) => {
if (renderProps) {
let htmlStr = React.renderToString(<RoutingContext {...renderProps} />);
res.render('index-server-local', { reactHtml: htmlStr });
}
}
我的 browser.js:
React.render(<Router history={history} routes={routeConfig} />, document.getElementById('content'));
我正在使用 react-router 1.0.0 和 React 0.13.3。
【问题讨论】:
标签: express reactjs react-router