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
已经在做我需要的事情了
我有一个问题,我没有意识到只有在使用mixinReactAsync.mixin
的类上才调用getInitialStateAync
例如
@克里斯都有帮助吗?如果您有任何疑问,请告诉我。谢谢您的回答,一旦我有时间尝试,我会接受您的回答。