在compoenntDidMount生命周期中,我正在获取API,获取数据并捕获潜在的错误。我可以正确获取数据。但是,在赶上错误阶段时,我也想更新我的状态,但是很奇怪,我不能。
在状态下,我有一个 isError 布尔值。默认情况下为false。当我更改访存中的api网址时,可以看到console.log消息,但是我的isError仍然为false。
componentDidMount() {
fetch(
"url"
)
.then(response => response.json())
.then(data => {
this.setState({
data1: data.response.venues,
});
})
.catch(error => {
this.setState({isError: true})
console.log("bla bla", error)
});
}
答案 0 :(得分:1)
Nicholas Tower 我认为是正确的。
首先使用ES6
或redux
吗?
第二次尝试将您的api调用传递给异步函数。
如nicholas所说,用await
捕获呼叫以避免setState执行。
如果您使用redux,请通过操作调用api,这是一种更好的做法。 这里有个小例子:https://redux.js.org/advanced/asyncactions
也许是这样:
{
try {
const ret = await my_action(*);
}
catch (error) {
this.setState({
isError: true,
errorInState: error,
});
}
}
有时执行速度超过一些较慢的动作,并会创建令人难以置信的错误。