You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js+Redux-Thunk中getServerSideProps调用store.dispatch报AsyncThunkAction类型错误

问题根因

该报错本质是next-redux-wrapper传入getServerSideProps的store实例的dispatch方法默认使用基础AnyAction类型,未包含Redux Thunk的异步Action类型定义,因此无法识别异步Thunk函数作为入参。组件内调用正常是因为你通常会给组件内的useDispatch钩子指定包含Thunk能力的自定义AppDispatch类型,两边类型不一致导致该问题。


具体解决方案

步骤1:修正store.tsx类型定义

configureStore默认已经集成了Thunk中间件的类型,不需要手动拼接ThunkDispatch类型,直接从store实例推导即可:

import { configureStore, ThunkAction, Action } from '@reduxjs/toolkit';
import { createWrapper } from 'next-redux-wrapper';
import rootReducer from './reducers';

const makeStore = () => configureStore({
    reducer: rootReducer,
    middleware: getDefaultMiddleware => getDefaultMiddleware(),
});

export type AppStore = ReturnType<typeof makeStore>;
export type AppState = ReturnType<AppStore['getState']>;
// 直接从store实例推导dispatch类型,自带Thunk类型支持
export type AppDispatch = AppStore['dispatch'];
export type AppThunk<ReturnType = void> = ThunkAction<ReturnType, AppState, unknown, Action>;

// 给createWrapper指定AppStore泛型,让后续返回的store类型自动匹配
export default createWrapper<AppStore>(makeStore);

步骤2:调整getServerSideProps代码

调整后store.dispatch已经是正确的AppDispatch类型,无需额外断言,同时注意异步Thunk返回Promise需要加await获取结果:

export const getServerSideProps = wrapper.getServerSideProps((store) => async () => {
    // 异步Thunk返回Promise,必须加await等待执行完成
    const resultAction = await store.dispatch(getPeoples(1));
    // 推荐用unwrap方法获取异步返回值,执行失败时会抛出错误可直接捕获
    const data = resultAction.unwrap();
    return {
      props: {
        peoples: data,
      },
    };
  }
);

如果不想修改wrapper的泛型定义,也可以用临时类型断言解决:

const dispatch = store.dispatch as AppDispatch;
dispatch(getPeoples(1));

内容的提问来源于stack exchange,提问作者foreverchoi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:30:01