spee.ch/client/src/index.js
2018-07-31 16:43:08 -07:00

46 lines
1.3 KiB
JavaScript

import React from 'react';
import { hydrate } from 'react-dom';
import { Provider } from 'react-redux';
import { createStore, applyMiddleware, compose } from 'redux';
import { BrowserRouter } from 'react-router-dom';
import createSagaMiddleware from 'redux-saga';
import Reducers from '@reducers';
import Sagas from '@sagas';
import App from '@app';
import GAListener from '@components/GAListener';
// import scss so webpack will build it
import 'all.scss';
// get the state from a global variable injected into the server-generated HTML
const preloadedState = window.__PRELOADED_STATE__ || null;
// Allow the passed state to be garbage-collected
delete window.__PRELOADED_STATE__;
// create and apply middleware
const sagaMiddleware = createSagaMiddleware();
const middleware = applyMiddleware(sagaMiddleware);
const reduxMiddleware = window.__REDUX_DEVTOOLS_EXTENSION__ ? compose(middleware, window.__REDUX_DEVTOOLS_EXTENSION__()) : middleware;
// create the store
let store;
if (preloadedState) {
store = createStore(Reducers, preloadedState, reduxMiddleware);
} else {
store = createStore(Reducers, reduxMiddleware);
}
sagaMiddleware.run(Sagas.rootSaga);
// render the app
hydrate(
<Provider store={store}>
<BrowserRouter>
<GAListener>
<App />
</GAListener>
</BrowserRouter>
</Provider>,
document.getElementById('react-app')
);