【问题标题】:How can I assign an array to a state variable?如何将数组分配给状态变量?
【发布时间】:2020-03-30 17:27:33
【问题描述】:

我有一个看起来像这样的函数:

select(e) {
    let { selectedItems } = this.state;

    let arr: number[] = [];
    for (var i = 0; i < 2; i++) arr = [...arr, i];

    this.setState(
      {
        selectedItems: arr,
      }
    );
  console.log(selectedItems);
  }

但是当我尝试console.log(selectedItems) 时,我得到的只是一个空数组。当我 console.log(arr) 时,我得到了我正在寻找的正确输出 - 一个长度为 2 的数组。这里可能发生了什么以及如何将 selectedItems 分配给 arr 的值?

【问题讨论】:

标签: javascript reactjs typescript jsx


【解决方案1】:
class A {
  select(e) {
    let { selectedItems } = this.state;
    let arr: number[] = [];
    for (var i = 0; i < 2; i++) arr = [...arr, i];
    this.setState({
      selectedItems: arr
    }, function callback() {
      console.log(this.state) // will have updated value
    });
    console.log(selectedItems); // wont print anything, coz u never assign
    selectedItems = arr;
    console.log(selectedItems); // will have updated value
  }
}

【讨论】:

  • 谢谢,我太傻了,我才意识到这就是我一直想念的东西
【解决方案2】:

setState 采用回调函数。请尝试以下操作:

  select(e) {
    let { selectedItems } = this.state;

    let arr: number[] = [];
    for (var i = 0; i < 2; i++) arr = [...arr, i];

    this.setState({
      selectedItems: arr,
    }, function(){
        console.log(this.state);
    }.bind(this));
  }


【讨论】:

  • 这个不行,你需要将this关键字绑定到那个回调函数上。
  • 检查下面的答案。未绑定,似乎可以工作
猜你喜欢
  • 2018-08-29
  • 1970-01-01
  • 2020-07-27
  • 2016-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 2020-11-01
相关资源
最近更新 更多