Redux Persist TypeError:store.dispatch 不是函数

mar*_*476 4 store redux react-redux react-hooks redux-toolkit

在学习教程时,我收到了 store.dispatch is not a function 错误。我在 stackoverflow 上搜索了一段时间,但似乎找不到任何错误。我缺少什么?

显示错误的图片 [1]:https://i.stack.imgur.com/AekWH.png

import {configureStore, combineReducers} from '@reduxjs/toolkit'
import cartReducer from './cartRedux'
import userReducer from './userRedux'
import {
  persistStore,
  persistReducer,
  FLUSH,
  REHYDRATE,
  PAUSE,
  PERSIST,
  PURGE,
  REGISTER,
} from 'redux-persist'
import storage from 'redux-persist/lib/storage'

const persistConfig = {
  key: 'root',
  version: 1,
  storage,
}

const rootReducer = combineReducers({user: userReducer, cart: cartReducer})
const persistedReducer = persistReducer(persistConfig, rootReducer)

export const store = () => configureStore({
  reducer: persistedReducer,
  middleware: (getDefaultMiddleware) =>
    getDefaultMiddleware({
      serializableCheck: {
        ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],
      },
    }),
})


export const persistor = persistStore(store)
Run Code Online (Sandbox Code Playgroud)

指数

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import {Provider} from 'react-redux'
import {store, persistor} from './redux/store'
import { PersistGate } from 'redux-persist/integration/react'

ReactDOM.render(
  <Provider store={store}>
    <PersistGate loading={null} persistor={persistor}>
      <App />
    </PersistGate>
  </Provider>,
  document.getElementById('root')
);
Run Code Online (Sandbox Code Playgroud)

Dre*_*ese 14

看来您声明了您store是一个返回已配置存储的函数。

export const store = () => configureStore({ // <-- a function
  reducer: persistedReducer,
  middleware: (getDefaultMiddleware) =>
    getDefaultMiddleware({
      serializableCheck: {
        ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],
      },
    }),
})
Run Code Online (Sandbox Code Playgroud)

并且您传递对此store函数的引用persistStore

export const persistor = persistStore(store) // <-- store not invoked
Run Code Online (Sandbox Code Playgroud)

虽然您可以在每个地方调用该store函数,但这会很糟糕,因为您实际上会在应用程序的不同部分创建多个无法协同工作的商店实例。您应该只导出并使用已配置的商店对象。

export const store = configureStore({
  reducer: persistedReducer,
  middleware: (getDefaultMiddleware) =>
    getDefaultMiddleware({
      serializableCheck: {
        ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],
      },
    }),
});

export const persistor = persistStore(store);
Run Code Online (Sandbox Code Playgroud)