我目前正在阅读一本关于 React 和 Universal 应用程序的书,其中作者声称以下是将初始状态从服务器传递到客户端的最佳实践:
服务器.js
import React from 'react';
import {renderToStaticMarkup} from 'react-dom/server';
import Myapp from '../MyApp';
import api from '../services';
function renderPage(html, initialData) {
return `
<html>
<body>
${html}
</body>
<script>
window.__INITIAL_STATE__ = ${JSON.stringify(initialData)};
</script>
<script src="bundle.js"></script>
</html>
`;
}
export default function(request, reply) {
const initialData = api.getData();
const html = renderToStaticMarkup(<MyApp />);
reply(renderPage(html, initialData);
}
然后,在客户端中,您将读取如下数据:
捆绑.js
const initialData = window.__INITIAL_STATE__ || {};
const mountNode = document.getElementById('root');
ReactDOM.render(<MyApp />, mountNode);
据我了解,初始状态首先转换为字符串,然后作为全局对象文字附加到窗口对象。
这个解决方案对我来说看起来很粗糙。这本书于 2016 年年中发布。使用方法window.__INITIAL_STATE__
仍然是如何做到这一点还是有更好的解决方案?
例如,我可以想象可以在单独的微服务调用中提供初始状态,然后也可以比将数据直接嵌入到文档中更好地缓存,因为这样初始状态数据必须在每个页面刷新的时间,即使数据没有改变。