Skip to content
This repository has been archived by the owner on Jan 26, 2020. It is now read-only.

Commit

Permalink
only hydrate if server-rendered; prevents client-server mistmatch in …
Browse files Browse the repository at this point in the history
…dev mode CLOSES #50
  • Loading branch information
alidcast committed Jul 13, 2018
1 parent ce69d62 commit 3d5d715
Showing 1 changed file with 13 additions and 8 deletions.
21 changes: 13 additions & 8 deletions packages/rogue-app/lib/client/hydrate.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,24 @@
import React, { createElement as h } from 'react'
import { hydrate } from 'react-dom'
import ReactDOM from 'react-dom'
import { BrowserRouter } from 'react-router-dom'
import { loadComponents } from 'loadable-components'
import { APP_ID, DATA_KEY } from '../shared/constants'

function getSsrData () {
return typeof window !== undefined ? window[DATA_KEY] : {}
}
export default function hydrate (App: React.ComponentType<any>) {
const data = getSsrData()

// only hydrate if server rendered (prevents client-server mistach in development)
const mount = !data ? ReactDOM.hydrate : ReactDOM.render

export default function hydrateApp (App: React.ComponentType<any>) {
const props = getSsrData()
return loadComponents().then(() => (
hydrate(
h(BrowserRouter, {}, h(App, props)),
mount(
h(BrowserRouter, {}, h(App, data)),
document.getElementById(APP_ID)
)
))
}


function getSsrData () {
return typeof window !== undefined ? window[DATA_KEY] : null
}

0 comments on commit 3d5d715

Please sign in to comment.