在React中,可以总是调用ReactDOM.hydrate而不是ReactDOM.render吗?

Pet*_*ner 8 reactjs react-router

我有以下代码,我正在打电话ReactDOM.hydrate.这是共享代码,有时会从节点服务器调用,有时也会在客户端浏览器中调用.hydrate在客户端上调用它时,是否需要执行任何不同的操作(然后调用).通常,我打电话render.

const render = Component => {
 ReactDOM.hydrate(
    <Router history={browserHistory}>
        <FullPage />
    </Router>,
    document.getElementById('root')
 )
}
Run Code Online (Sandbox Code Playgroud)

渲染(应用程序);

Faw*_*waz 6

hydraterender无论 HTML 是否具有服务器呈现的标记,do 的工作方式与客户端类似,但是当以前没有像 not SSR 那样的标记时,会hydrate产生一些警告,但是,它会按预期呈现您的标记。解决此问题的更好方法是检查其 SSR(假设root为您的父 div id):

var isMarkupPresent = document.getElementById('root').hasChildNodes();
Run Code Online (Sandbox Code Playgroud)

然后你可以render或者hydrate

isMarkupPresent ? hydrate(...) ? render(...)
Run Code Online (Sandbox Code Playgroud)