5

我试图了解React 16.8.6之间ReactDOMServer.renderToString()的区别。ReactDOMServer.renderToStaticMarkup()

这是我的理解:

所以,如果我是对的,这两种方法之间的唯一区别是renderToString()添加了data-reactroot应用程序的主要元素。renderToStaticMarkup()React 在文档中强化了这一点:

与 renderToString 类似,但它不会创建 React 内部使用的额外 DOM 属性,例如data-reactroot。如果您想将 React 用作​​简单的静态页面生成器,这很有用,因为剥离额外的属性可以节省一些字节。

如果您打算在客户端使用 React 来使标记交互,请不要使用此方法。相反,在服务器上 使用renderToString ,在客户端使用ReactDOM.hydrate()

但是,我在 React 的存储库上阅读了这个问题,Dan Abramov 说:

相反,使用hydrate()明确告诉 React 水合现有的 HTML。那么它不会取决于 data-reactroot 是否存在。

和:

...建议的迁移路径是使用ReactDOM.hydrate()完全 回避问题,因为它不依赖于 data-reactroot 属性。

所以,我的问题是:data-reactroot 是否与 React 中的 hydrate 函数相关,或者文档是否错误?

了解这一点对于修复我在补水时遇到的错误非常有帮助。

4

0 回答 0