Как я могу присвоить массив переменной состояния? - PullRequest
0 голосов
/ 30 марта 2020

У меня есть функция, которая выглядит следующим образом:

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?

Ответы [ 2 ]

1 голос
/ 30 марта 2020
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
  }
}
1 голос
/ 30 марта 2020

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));
  }


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...