我有一个React组件,它调用函数getAllPeople
:
componentDidMount() {
getAllPeople().then(response => {
this.setState(() => ({ people: response.data }));
});
}
getAllPeople
在我的api
模块中:
export function getAllPeople() {
return axios
.get("/api/getAllPeople")
.then(response => {
return response.data;
})
.catch(error => {
return error;
});
}
我认为这是一个非常基本的问题,但是假设我想在我的根组件中(在我的componentDidMount
方法中)而不是在api
函数中处理错误,那么这个根组件如何知道axios
调用是否返回错误?也就是说,处理来自axios
承诺的错误的最佳方式是什么?
6条答案
按热度按时间xxslljrj1#
使用Promise catch方法处理API错误的更好方法*。
ewm0tg9j2#
getAllPeople
函数已经从axios
调用中返回了数据或错误消息。因此,在componentDidMount
中,您需要检查对getAllPeople
的调用的返回值,以确定返回的是错误还是有效数据。如果要从API返回承诺,则不应解析api中
axios
调用返回的承诺,而可以执行以下操作:然后可以在
componentDidMount
中解析。mutmk8jj3#
我的建议是使用React.Error Boundaries的一个前沿特性
这是Dan Abramov使用这个特性的一个例子。在这种情况下,你可以用这个错误边界组件 Package 你的组件。在axios中捕获错误的特殊之处在于你可以使用拦截器来捕获API错误。你的错误边界组件可能看起来像这样
然后,可以用它 Package 根组件传递axios示例
因此,您根本不需要考虑组件内部的错误。
agyaoht74#
您可以在将其设置为
state
之前检查响应。它依赖于
axios
将为成功和失败返回不同的对象这一事实。8nuwlpux5#
来自Yevhenii Herasymchuk的解决方案非常接近我所需要的,但是,我的目标是使用功能组件实现,以便我可以使用Hooks和Redux。
首先,我创建了一个 Package 器:
然后,我 Package 了项目中需要检查axios行为的部分。
最后,我在项目中需要的任何地方导入axios示例(http)。
希望它能帮助任何希望有不同方法的人。
wpx232ag6#
我只是将Yevhenii Herasymchuk和GeorgeCodeHub的两个答案结合起来,修正了一些错误,并将其移植到React钩子中。
用法: