我想知道如何最好地呈现服务器端(而不是在客户机上呈现)和处理来自异步查询的状态更改。
理想的例子:
这里发生的事情是,ReactDOM.renderToStaticMarkup(),如预期的那样,不会等待组件完成状态更改(在本例中,等待数据并重新呈现)。
澄清:
这里没有客户,这不是典型的SSR。我只需要服务器上的完整HTML,以便以后可以执行其他操作。这里的问题是如何等待那些异步调用,使用我在客户机上使用的组件(它有状态和一些setStates)。
那么,我认为唯一的方法是拥有只接收道具的无状态组件(以前执行所有的套接字处理,然后将数据传递给每个组件)。现在,组件反应平平,不涉及Redux (这就是为什么它们不是无状态的)。
还有其他的想法/方法吗?
谢谢!
发布于 2016-02-24 11:18:10
如果不涉及客户端,那么无论发生什么,您都需要等待所有数据加载才能呈现。
如果可能,我建议将所有异步工作移到组件树之外。然后将其传递到根组件,在调用render时分发给子组件(通过道具)。
createAsyncState(function(state) {
// generate the markup for this component tree
const markup = ReactDOMServer.renderToString(
<Component state={state} />
);
// serve the markup to the client
res.end(markup);
});如果您也想在客户端上使用相同的组件,那么您所需要做的就是确保您的createAsyncState等效物也在浏览器中工作。
https://stackoverflow.com/questions/35600120
复制相似问题