| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- /* eslint-disable */
- import React from "react";
- import initializeStore from "./redux-store";
- const isServer = typeof window === "undefined";
- const __NEXT_REDUX_STORE__ = "__NEXT_REDUX_STORE__";
- function getOrCreateStore(initialState) {
- // Always make a new store if server, otherwise state is shared between requests
- if (isServer) {
- return initializeStore(initialState);
- }
- // Create store if unavailable on the client and set it on the window object
- if (!window[__NEXT_REDUX_STORE__]) {
- window[__NEXT_REDUX_STORE__] = initializeStore(initialState);
- }
- return window[__NEXT_REDUX_STORE__];
- }
- export default App =>
- class AppWithRedux extends React.Component {
- static async getInitialProps(appContext) {
- // Get or Create the store with `undefined` as initialState
- // This allows you to set a custom default initialState
- const reduxStore = getOrCreateStore();
- // Provide the store to getInitialProps of pages
- appContext.ctx.reduxStore = reduxStore;
- let appProps = {};
- if (typeof App.getInitialProps === "function") {
- appProps = await App.getInitialProps(appContext);
- }
- return {
- ...appProps,
- initialReduxState: reduxStore.getState()
- };
- }
- constructor(props) {
- super(props);
- this.reduxStore = getOrCreateStore(props.initialReduxState);
- }
- render() {
- return <App {...this.props} reduxStore={this.reduxStore} />;
- }
- };
|