Skip to content

Commit

Permalink
Use ReactDOM.hydrate() for hydrating a SSR component if available
Browse files Browse the repository at this point in the history
  • Loading branch information
theJoeBiz committed Feb 9, 2018
1 parent 7923549 commit 51b40de
Showing 1 changed file with 13 additions and 3 deletions.
16 changes: 13 additions & 3 deletions node_package/src/clientStartup.js
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,8 @@ function domNodeIdForEl(el) {
}

/**
* Used for client rendering by ReactOnRails. Either calls ReactDOM.render or delegates
* to a renderer registered by the user.
* Used for client rendering by ReactOnRails. Either calls ReactDOM.hydrate, ReactDOM.render, or
* delegates to a renderer registered by the user.
* @param el
*/
function render(el, railsContext) {
Expand Down Expand Up @@ -128,7 +128,17 @@ function render(el, railsContext) {
You returned a server side type of react-router error: ${JSON.stringify(reactElementOrRouterResult)}
You should return a React.Component always for the client side entry point.`);
} else {
ReactDOM.render(reactElementOrRouterResult, domNode);
const shouldHydrate = !!(
ReactDOM.hydrate &&
domNode &&
domNode.hasAttribute('data-reactroot')
);

if (shouldHydrate) {
ReactDOM.hydrate(reactElementOrRouterResult, domNode);
} else {
ReactDOM.render(reactElementOrRouterResult, domNode);
}
}
}
} catch (e) {
Expand Down

0 comments on commit 51b40de

Please sign in to comment.