hydrate
的用法不限于renderToNodeStream
- 您可以(实际上应该)也将它与经典的renderToString
. renderToNodeStream
本质上是相同的renderToString
,除了它产生一个 http 流而不是一个字符串。这意味着您可以在渲染过程中将渲染的html逐字节发送给客户端,与标准相反renderToString
,您必须先等待整个html字符串渲染,然后才能将其发送给客户端。
ReactDOM.hydrate
是标准的替代品ReactDOM.render
。基本的(也是唯一的?)区别在于,ReactDOM.render
与 即使存在一些细微的差异,它也会尝试将 React 客户端应用程序附加到服务器渲染的 DOM,只修补不同的部分。
由于 的流式特性renderToNodeStream
,在库的当前状态下,Helmet 的服务器端使用实际上是不可能的 - 在head
React 获取计算包含 Helmet 组件的 DOM 时,DOM 的一部分被发送到服务器。流不能只是恢复并将 Helmet 的更改附加到head
.
总而言之,回答您的问题 -renderToNodeStream
通过发送流解决了同步渲染到字符串的问题,但它引入了新问题,即如果 React 应用程序的其他部分需要它,则无法修补推送的内容。它不会在服务器端的状态更改和重新渲染方面添加任何内容。另一方面,hydrate
在这个主题中没有引入任何新东西——它只是一个调整的、更宽容的旧版本render
。
官方文档解释了很多!https://reactjs.org/docs/react-dom.html