反应setState不更新状态

时间:2020-04-21 23:58:29

标签: javascript reactjs react-native

我试图简单地从此用户API中提取并将数组置于状态中的用户变量中。然后,我将其打印在componentDidMount()中,但它打印为“未定义”。

state = {
      users: [],
    }


  componentDidMount() {
    this.getCaseCount();
    console.log(this.state.users);
  }

//CoronaVirus API Goes here
getCaseCount(){
  fetch(`https://jsonplaceholder.typicode.com/users`)
  .then(response => response.json())
  .then(data =>
    this.setState({
      users: data,
    })
  )
}

2 个答案:

答案 0 :(得分:2)

在安装组件时,将调用getCaseCount()并从

获取数据
https://jsonplaceholder.typicode.com/users

在等待来自API的响应时,它会继续进行下一部分 并记录状态,但由于未接收到数据,因此此时状态未更新,因此显示状态的初始值是一个空数组。

一旦收到来自API的响应,就会重新呈现组件,但是componentDidMount仅运行一次,因此您看不到其中的更新状态。

要查看更新的状态,请在渲染器中写入console.log(this.state)。

state = {
      users: [],
    }


  componentDidMount() {
    this.getCaseCount();
    console.log(this.state.users);
  }

//CoronaVirus API Goes here
getCaseCount(){
  fetch(`https://jsonplaceholder.typicode.com/users`)
  .then(response => response.json())
  .then(data =>
    this.setState({
      users: data,
    })
  )
}

render{
   console.log(this.state.users)
}

答案 1 :(得分:1)

工作正常。尝试将console.log放在render()内,您会看到数组中有东西。

在您的componentDidMount中,获取数据需要一些时间,这就是为什么它最初显示为空数组的原因。