javascript - SSR React应用程序的渲染过程和异步代码执行

标签 javascript reactjs server-side-rendering

当我用react做SSR时,发送给客户端的内容是如何构造的?

  • 它是否等待异步操作完成?
  • 是否等待状态 树中的所有组件是否以某种方式保持稳定?
  • 它会在某些生命周期方法中等待异步代码,例如用 await/async 代码修饰的 componentWillMount() ... 吗?
  • 如果我将一些异步代码包装到 Promise 中并调用它的回调函数 setState - 是否会考虑此更改?

最佳答案

这将是一个简单的 html 作为字符串,来自:

ReactDOMServer.renderToString(element)

并应在浏览器上呈现。剩下的所有从 html 加载的 js 包将在加载时超过您的应用程序。这是常规的 react 包:

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

所以服务器渲染的 html 将是这样的:

<html>
<head>
  ...
</head>
<body>
  <div id="root">
     // your server rendered html string shows up here
  </div>
  <script src="/react-bundle.js"></script>
</body>
</html>

Promise 和异步代码不会成为此呈现的 html 的一部分,但如果您需要添加它,这将需要一些额外的技巧。 componentWillMount 中的代码将被执行并包含在服务器渲染的字符串中,但是在组件安装后触发的方法(如 componentDidMount)不会对服务器渲染的字符串产生影响。

关于javascript - SSR React应用程序的渲染过程和异步代码执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48644707/

相关文章:

javascript - 当覆盖打开时如何停止 fullpage.js 滚动?

javascript - Chart.js - 在哪里放置全局图表配置?

android - 从 Activity 类调用方法 (React Native Android)

javascript - 使用 create-react-app 创建应用程序后,数组中的元素缺少 "key"属性

reactjs - 将参数传递给样式化组件

javascript - Firebase 函数 - 如何验证从 CDN 缓存加载静态内容?

php - 在 React 中为服务器端渲染生成 CSS - Material-UI

css - 如何使用 CMS 中的类名动态地将类添加到 NextJS 组件?

javascript - 检查事件是否已初始化并且有没有 jQuery 的监听器

javascript - 使用 live() 时,有没有办法强制事件在给定元素(每个元素,而不是整个文档)上仅触发一次?