【问题标题】:Last element not added to array of a state element最后一个元素未添加到状态元素的数组中
【发布时间】:2018-07-21 04:09:30
【问题描述】:

在下面的代码中,当第一个元素 (a) 传递给 checkBoxClicked 函数时,第 2 行中的 console.log(id) 打印 a 但 console.log(this.state.dealIdToUnSave) 打印 [] 应该打印的位置[a]。

稍后当另一个元素(比如说 b)被传递给 checkBoxClicked 函数时,console.log(id) 打印 b 但 console.log(this.state.dealIdToUnSave) 只打印 [a] 虽然它应该打印 [a , b]

这可能发生的任何明显原因?

checkBoxClicked = (id) => {
        console.log(id);
        this.setState({
            dealIdToUnSave: [...this.state.dealIdToUnSave, id]
        });
        console.log(this.state.dealIdToUnSave);
    }

【问题讨论】:

  • this.setState 是异步的,所以它可能不会在下一个代码中显示更新的值

标签: reactjs react-native setstate


【解决方案1】:

由于 setState 是异步的,您可以在作为第二个参数传递给 setState 的回调函数中记录状态变化。

checkBoxClicked = (id) => {
  console.log(id);
  this.setState({
    dealIdToUnSave: [...this.state.dealIdToUnSave, id]
  }, () => {
    console.log(this.state.dealIdToUnSave);
  });
}

【讨论】:

    【解决方案2】:

    状态变化可能不会立即发生。在this.setState的文档中明确提到了

    将 setState() 视为更新组件的请求而不是立即命令。为了更好地感知性能,React 可能会延迟它,然后一次更新多个组件。 React 不保证立即应用状态更改。

    【讨论】:

    • 有没有办法可以在这里使用 promise 而不是回调?
    • 我该怎么做?
    猜你喜欢
    • 2022-01-23
    • 2014-11-05
    • 2022-11-21
    • 1970-01-01
    • 2021-05-16
    • 2021-03-14
    • 2021-04-22
    • 1970-01-01
    • 2019-08-19
    相关资源
    最近更新 更多