首先页面由服务器渲染,然后在客户端/浏览器端,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 0.13.3和react-router 1.0.0。