Reactjs &引用;动作必须是普通对象。使用自定义中间件进行异步操作。”;使用react/redux

Reactjs &引用;动作必须是普通对象。使用自定义中间件进行异步操作。”;使用react/redux,reactjs,redux,react-redux,axios,redux-thunk,Reactjs,Redux,React Redux,Axios,Redux Thunk,我遇到了这个错误,在过去的几个小时里我一直在努力解决这个问题。我已经看过了所有看似重复的问题——但它们并不能解决问题 在我的react/redux应用程序中,当我在一个操作中发出ajax请求时,它抛出以下错误: 未捕获错误:操作必须是普通对象。使用自定义中间件进行异步操作。 我的店铺创建如下所示: 从'redux devtools extension'导入{composeWithDevTools}; 从“./reducers”导入减速机; 从“redux thunk”导入thunk中间件; 从

我遇到了这个错误,在过去的几个小时里我一直在努力解决这个问题。我已经看过了所有看似重复的问题——但它们并不能解决问题

在我的react/redux应用程序中,当我在一个操作中发出ajax请求时,它抛出以下错误:
未捕获错误:操作必须是普通对象。使用自定义中间件进行异步操作。

我的店铺创建如下所示:

从'redux devtools extension'导入{composeWithDevTools};
从“./reducers”导入减速机;
从“redux thunk”导入thunk中间件;
从“redux”导入{applyMiddleware,createStore};
导出默认createStore(还原器、composeWithDevTools(
applyMiddleware(Thunk中间件)

));
首先想到的是,您的
fetchVehicleLookup
操作在呻吟,因为您返回的是
axios
,而不仅仅是在内部调度

export function fetchVehicleLookup(vrm: string, jwt: string) {
    return function (dispatch) {
        dispatch(requestVehicleLookup());

        axios.create({
            timeout: 4000,
        })
            .post('/*api url*', {
                action: '*method*',
                body: { vrm },
            })
            .then(response => response.data)
            .then(json => dispatch(receiveVehicleData(json)))
            .catch(error => dispatch(receiveVehicleDataFailure(error)));
    };
}
只需删除动作中的
return
语句,因为它将返回axios表示的任何对象,我认为这将是某种形式的
Promise


第二个想法可能是关于你的商店设置,因为它听起来像是
thunk
实际上不起作用。

在与@Glitch100进行了很长时间的聊天后,我终于找到了答案(谢谢!)。我需要在axios承诺创建之后返回requestVehicleLookup的调度。像这样:

导出函数fetchVehicleLookup(vrm:string,jwt:string){ 返回功能(调度){ axios.create({ 超时:4000, }) .post(“/*api url*”{ 操作:“*方法*”, 正文:{vrm}, }) .then(response=>response.data) 。然后(json=>dispatch(receiveVehicleData(json))) .catch(错误=>调度(接收车辆数据失败(错误)); 退货派送(requestVehicleLookup()); };
}我已经从axios中删除了该返回,同样的错误仍然存在——为了测试,我将编辑以从我的操作中删除整个
axios
部分,并只发送一个虚拟操作。错误是否仍然存在?是否还可以包括正在调度异步操作的代码?