import * as React from "react"; import * as ReactDOM from "react-dom"; import { AppContainer } from "react-hot-loader"; import { Router } from "react-router-dom"; import App from "@client/App"; import { AppState, ProvideState } from "@client/state"; import logger from "@common/logger"; const state = new AppState(); state.start() .catch((err: any) => { logger.error({ err }, "error starting state"); }); const rootElem = document.getElementById("app"); const doRender = (Component: React.ComponentType) => { ReactDOM.render(( <AppContainer> <ProvideState state={state}> <Router history={state.history}> <Component/> </Router> </ProvideState> </AppContainer> ), rootElem); }; doRender(App); if (module.hot) { module.hot.accept("@client/App", () => { const NextApp = require<any>("@client/App").default as typeof App; doRender(NextApp); }); }