Reactjs React可用于服务器端渲染。这是什么意思?

Reactjs React可用于服务器端渲染。这是什么意思?,reactjs,redux,isomorphic-javascript,Reactjs,Redux,Isomorphic Javascript,我是一个新的反应和重复。虽然我知道React只是一个视图层。但我看到了一个术语“React可用于服务器端渲染”。这意味着什么,以及它在nodejs幕后是如何工作的。有谁能帮我弄清楚“react中的服务器端渲染是什么”这一事实吗 react dom包包括一个服务器模块。此模块允许您使用reactDOMServer.renderTostring()将react应用程序呈现为简单的HTML字符串。基本上是一组给定的道具的视图快照: 此外,此函数根据它生成的字符串计算一个唯一的散列,并将其附加到htm

我是一个新的反应和重复。虽然我知道React只是一个视图层。但我看到了一个术语“React可用于服务器端渲染”。这意味着什么,以及它在nodejs幕后是如何工作的。有谁能帮我弄清楚“react中的服务器端渲染是什么”这一事实吗

react dom包包括一个
服务器
模块。此模块允许您使用
reactDOMServer.renderTostring()
将react应用程序呈现为简单的HTML字符串。基本上是一组给定的
道具的视图快照:

此外,此函数根据它生成的字符串计算一个唯一的散列,并将其附加到html中。在客户端react可以“提取”服务器生成的HTML,并将其用作“第一次呈现”

尽管客户端第一渲染和服务器渲染需要生成完全相同的输出,以便react在客户端拾取它。React可以通过生成的哈希来检查这一点:客户端React还将生成一个html字符串(不修改实际的DOM,我认为这只在虚拟DOM上完成)。现在,它还可以从它的虚拟DOM计算一个散列,并将其与服务器呈现的散列进行比较。如果它们匹配,则不需要进行渲染。如果没有,客户端react将丢弃服务器生成的DOM,并将其替换为其版本(并打印错误/警告)

结合redux,这意味着除了呈现HTML之外,还需要将存储状态(
store.getState()
)传递给客户端。然后,客户机可以在创建其redux存储实例时使用此序列化状态作为初始状态。这将导致两个渲染(客户端+服务器)匹配

如果您不需要客户端执行任何操作,只想在服务器端创建静态标记,
react dom
提供了一个
renderToStaticMarkup()
函数:


react dom
包包括一个
服务器
模块。此模块允许您使用
reactDOMServer.renderTostring()
将react应用程序呈现为简单的HTML字符串。基本上是一组给定的
道具的视图快照:

此外,此函数根据它生成的字符串计算一个唯一的散列,并将其附加到html中。在客户端react可以“提取”服务器生成的HTML,并将其用作“第一次呈现”

尽管客户端第一渲染和服务器渲染需要生成完全相同的输出,以便react在客户端拾取它。React可以通过生成的哈希来检查这一点:客户端React还将生成一个html字符串(不修改实际的DOM,我认为这只在虚拟DOM上完成)。现在,它还可以从它的虚拟DOM计算一个散列,并将其与服务器呈现的散列进行比较。如果它们匹配,则不需要进行渲染。如果没有,客户端react将丢弃服务器生成的DOM,并将其替换为其版本(并打印错误/警告)

结合redux,这意味着除了呈现HTML之外,还需要将存储状态(
store.getState()
)传递给客户端。然后,客户机可以在创建其redux存储实例时使用此序列化状态作为初始状态。这将导致两个渲染(客户端+服务器)匹配

如果您不需要客户端执行任何操作,只想在服务器端创建静态标记,
react dom
提供了一个
renderToStaticMarkup()
函数:


这意味着您可以在服务器上预呈现react-powered页面,并在http响应中发送内容。这通常意味着用户的页面加载速度更快,并且被认为对SEO更友好。我有一个示例样板应用程序@ctrlplusb,因此我们将无法在客户端代码上看到“组件和其他React功能”。因此,在这种情况下,如何在浏览器上调试应用程序,您仍然可以使用标准的react-dev工具查看组件等。在其他方面,它将表现得像一个普通的react应用程序。这只意味着react在加载第一页时需要做的工作更少。试着复制我的样板文件并把它点燃。@ctrlplusb。我有点困惑。因为它已经是预渲染的,即使用webpack转换为JS代码(右)。那么为什么它会在浏览器中显示react组件呢。我的意思是,它是我们的服务器为调试目的创建的副本还是其他东西。这意味着您可以在服务器上预呈现react-powered页面,并在http响应中发送内容。这通常意味着用户的页面加载速度更快,并且被认为对SEO更友好。我有一个示例样板应用程序@ctrlplusb,因此我们将无法在客户端代码上看到“组件和其他React功能”。因此,在这种情况下,如何在浏览器上调试应用程序,您仍然可以使用标准的react-dev工具查看组件等。在其他方面,它将表现得像一个普通的react应用程序。这只意味着react在加载第一页时需要做的工作更少。试着复制我的样板文件并把它点燃。@ctrlplusb。我有点困惑。因为它已经是预渲染的,即使用webpack转换为JS代码(右)。那么为什么它会在浏览器中显示react组件呢。我的意思是,它是由我们的服务器为调试目的创建的副本还是其他东西。