我在调用的代码如下ReactDOM.hydrate。这是共享代码,有时会从节点服务器调用,有时会在客户端浏览器中调用。hydrate仅在客户端上调用时,是否需要做其他操作(然后调用)?通常,我会打电话给render。
ReactDOM.hydrate
hydrate
render
const render = Component => { ReactDOM.hydrate( <Router history={browserHistory}> <FullPage /> </Router>, document.getElementById('root') ) }
render(App);
hydrate``render无论HTML是否具有服务器呈现的标记,do的工作方式都类似于在客户端,但是如果以前没有像SSR那样没有标记,则会hydrate生成一些警告,但是它将按预期呈现标记。解决此问题的更好方法是检查其SSR(假定root为您的父div ID):
hydrate``render
root
var isMarkupPresent = document.getElementById('root').hasChildNodes();
然后您可以render或hydrate:
isMarkupPresent ? hydrate(...) ? render(...)