gpt4 book ai didi

express - React 服务器端和客户端渲染不无缝

转载 作者:行者123 更新时间:2023-12-03 13:27:46 25 4
gpt4 key购买 nike

首先页面由服务器渲染,然后在客户端/浏览器端,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 });
}
}

我的浏览器.js:

React.render(<Router history={history} routes={routeConfig} />, document.getElementById('content'));

我正在使用react-router 1.0.0和React 0.13.3。

最佳答案

我们需要在服务器端序列化数据(或状态),并将其发送到客户端进行反序列化,否则,客户端的数据与服务器渲染时的数据不同。它肯定会重新加载。一个异常(exception):纯静态页面,在这种情况下 React 建议我们使用 renderToStaticMarkup

Similar to renderToString, except this doesn't create extra DOM attributes such as data-react-id, that React uses internally. This is useful if you want to use React as a simple static page generator, as stripping away the extra attributes can save lots of bytes.

那么,我们如何序列化-反序列化?这是一个简单的版本:在您的 index-server-local.html 模板中:

   <script src="bundle.js"></script>

至:

   <script dangerouslySetInnerHTML={{{{__html: 'window.__data=' + JSON.stringify({key: 'value'})}}}} />
<script src="bundle.js"></script>

在客户端,我们现在可以使用__datadata。如何将数据映射到您的组件取决于您的选择。

为此,我推荐 Reudx:

   createStore(browserHistory, initialState)

然后

   <Provider store={store}>
{ component }
</Provider>

关于express - React 服务器端和客户端渲染不无缝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36855744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com