Redux/TypeScript测试遇TypeError: store.dispatch is not a function问题求助
问题原因与解决方案
你遇到的TypeError: store.dispatch is not a function错误,根源在于store.ts里的persistor初始化代码:
export let persistor = persistStore(setupStore as any);
这里你把setupStore工厂函数直接传给了persistStore,但persistStore需要接收的是Redux store实例,而不是函数。模块加载时这段代码会立即执行,persistStore内部会尝试调用传入对象的dispatch方法,而函数没有该方法,因此抛出错误。
修复步骤
- 移除store.ts中模块级别的persistor导出:删掉上述错误的
persistor初始化代码。 - 在应用入口文件中创建store和persistor:
// 示例:index.tsx import setupStore from './store'; import { persistStore } from 'redux-persist'; import { PersistGate } from 'redux-persist/integration/react'; import { Provider } from 'react-redux'; import App from './App'; // 先调用工厂函数生成store实例 const store = setupStore(); // 用store实例创建persistor const persistor = persistStore(store); ReactDOM.createRoot(document.getElementById('root')!).render( <React.StrictMode> <Provider store={store}> <PersistGate loading={null} persistor={persistor}> <App /> </PersistGate> </Provider> </React.StrictMode> );
额外说明
你的测试工具代码test-utils.tsx是正确的,它通过调用setupStore(preloadedState)生成了有效的store实例。修复persistor的初始化逻辑后,模块加载时的错误会消失,测试也能正常运行。
内容的提问来源于stack exchange,提问作者ln09nv2
相关产品推荐
相关产品推荐

