Reactjs &引用;动作必须是普通对象。使用自定义中间件进行异步操作。”;使用react/redux
我遇到了这个错误,在过去的几个小时里我一直在努力解决这个问题。我已经看过了所有看似重复的问题——但它们并不能解决问题 在我的react/redux应用程序中,当我在一个操作中发出ajax请求时,它抛出以下错误: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中间件; 从
未捕获错误:操作必须是普通对象。使用自定义中间件进行异步操作。
我的店铺创建如下所示:
从'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
部分,并只发送一个虚拟操作。错误是否仍然存在?是否还可以包括正在调度异步操作的代码?