redux-persist icon indicating copy to clipboard operation
redux-persist copied to clipboard

Store.getState is not a function error while setup in next.js

Open rohitmi0023 opened this issue 5 years ago • 3 comments

This is pretty basic still I am unable to figure out how to setup this package in my application. I am getting the above error. I have read here and there of how to fix it but still have not been able to. This is the store.js fille:-

import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import { composeWithDevTools } from 'redux-devtools-extension';
import rootreducer from './reducers';
import { persistStore, persistReducer } from 'redux-persist';
import storage from 'redux-persist/lib/storage';

const persistConfig = {
	key: 'root',
	storage,
};
const persistedReducer = persistReducer(persistConfig, rootreducer);
const initialState = {};
const middleware = [thunk];

export default () => {
	let store = createStore(
		rootreducer,
		initialState,
		persistedReducer,
		composeWithDevTools(applyMiddleware(...middleware))
	);
	let persistor = persistStore(store);
	return { store, persistor };
};

This is _app.js file:-

import { Provider } from 'react-redux';
import { createWrapper } from 'next-redux-wrapper';
import { PersistGate } from 'redux-persist/integration/react';
import store from '../store/store';

unction MyApp({ Component, pageProps }) {
	return (
		<Provider store={store}>
			<PersistGate persistor={persistor}>
				<Component {...pageProps} />
			</PersistGate>
		</Provider>
	);
}

const makestore = () => store;
const wrapper = createWrapper(makestore);

export default wrapper.withRedux(MyApp);

rohitmi0023 avatar Jul 19 '20 07:07 rohitmi0023

The store you import into your app js is an object {store, persistor} so in the Provider, it needs to be store={store.store} not store={store}

Similarly, for the persist gate it should be persistor={store.persistor}

njdullea avatar Mar 02 '21 21:03 njdullea

export default () => {
	let store = createStore(
		rootreducer,
		initialState,
		persistedReducer,
		composeWithDevTools(applyMiddleware(...middleware))
	);
	let persistor = persistStore(store);
	return { store, persistor };
};

Rewrote this to

       export let store = createStore(
		rootreducer,
		initialState,
		persistedReducer,
		composeWithDevTools(applyMiddleware(...middleware))
	);
	export let persistor = persistStore(store);

then use

import {store, persistor} from '../store/store';

maxpaynestory avatar Jul 26 '21 09:07 maxpaynestory

export default () => {
	let store = createStore(
		rootreducer,
		initialState,
		persistedReducer,
		composeWithDevTools(applyMiddleware(...middleware))
	);
	let persistor = persistStore(store);
	return { store, persistor };
};

Rewrote this to

       export let store = createStore(
		rootreducer,
		initialState,
		persistedReducer,
		composeWithDevTools(applyMiddleware(...middleware))
	);
	export let persistor = persistStore(store);

then use

import {store, persistor} from '../store/store';

It works! Thank you so much!

Orisland avatar May 14 '22 13:05 Orisland