Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ReactJS在客户端和服务器上运行不同的代码。_Javascript_Reactjs - Fatal编程技术网

Javascript ReactJS在客户端和服务器上运行不同的代码。

Javascript ReactJS在客户端和服务器上运行不同的代码。,javascript,reactjs,Javascript,Reactjs,在让页面在客户机上动态更新之前,我使用在服务器端呈现页面 某些页面需要来自服务器的数据。在客户机上运行时,他们通过superagent获取此信息 在初始(服务器端)呈现期间,我希望getInitialState页面能够直接获取其数据 这可能吗?有几种方法可以实现这一点 您正在使用的模板react quickstart使用AudreyOpp的react async加载项处理具有异步状态的渲染组件。自述文件中有一节详细介绍了这个场景: 基本上,您可以向ReactAsync.renderCompone

在让页面在客户机上动态更新之前,我使用在服务器端呈现页面

某些页面需要来自服务器的数据。在客户机上运行时,他们通过
superagent
获取此信息

在初始(服务器端)呈现期间,我希望
getInitialState
页面能够直接获取其数据


这可能吗?

有几种方法可以实现这一点

您正在使用的模板react quickstart使用AudreyOpp的react async加载项处理具有异步状态的渲染组件。自述文件中有一节详细介绍了这个场景:

基本上,您可以向
ReactAsync.renderComponentToStringWithAsyncState
的回调函数添加第三个参数,该参数指向当前服务器状态的快照。自述文件提供了以下示例:

ReactAsync.renderComponentToStringWithAsyncState(
  Component(),
  function(err, markup, data) {
    res.send(ReactAsync.injectIntoMarkup(markup, data, ['./client.js']))
})
injectIntoMarkup
将预先获取的状态数据注入为JSON blob,可以在代码的其他地方作为
窗口引用

另一种方法是不使用react async。相反,您可以调用
React.renderComponentToString
,将预取的服务器数据作为
props
传递

var markup = React.renderComponentToString(
    Item({ data: SERVER_DATA })
);
注意:您必须在组件代码中添加一些条件逻辑,以区分是作为
道具直接接收状态还是通过ajax/superagent接收状态,但这应该很简单

现在,就本例而言,假设您使用的是Handlebar/Express,您可以将组件字符串注入到模板中:

res.render('template', {
    markup: markup
});
<div id="container">{{{ markup }}}</div>
以及您的模板:

res.render('template', {
    markup: markup
});
<div id="container">{{{ markup }}}</div>
{{{markup}}
最后,为了让组件在客户端上正常工作,您可以像在客户端上一样调用
React.renderComponent
。React知道不替换刚从服务器渲染的组件,但在将来必要时将重新渲染它们


希望这有帮助,并乐意回答任何问题

react quickstart
已经在做我需要的事情了

我有一个问题,我没有意识到只有在使用mixin
ReactAsync.mixin
的类上才调用
getInitialStateAync

例如


@克里斯都有帮助吗?如果您有任何疑问,请告诉我。谢谢您的回答,一旦我有时间尝试,我会接受您的回答。