状态更新中

时间:2018-08-13 19:57:56

标签: javascript reactjs

在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)

            });
}

1 个答案:

答案 0 :(得分:1)

Nicholas Tower 我认为是正确的。

首先使用ES6redux吗?

第二次尝试将您的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,
    });
  }
}

有时执行速度超过一些较慢的动作,并会创建令人难以置信的错误。