helloWorld
helloWorld

Reputation: 153

How can I assign an array to a state variable?

I have a function that looks like this:

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

But when I try to console.log(selectedItems), all I get is an empty array. When I console.log(arr), I get the correct output I'm looking for -- an array of length 2. What might be going on here and how can I assign selectedItems to the value of arr?

Upvotes: 0

Views: 81

Answers (2)

DCR
DCR

Reputation: 15665

setState takes a callback function. Try the following:

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


Upvotes: 1

xdeepakv
xdeepakv

Reputation: 8125

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

Upvotes: 1

Related Questions