React-Native: невозможно установить размер массива в состоянии, равный размеру другого массива в состоянии - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть массив в моем состоянии с именем purchaseItems, значения которого в настоящее время жестко заданы. У меня есть другой массив с именем priceArray, который я инициализировал, чтобы он был пустым в состоянии, и я пытался изменить его в componentDidMount (), чтобы он имел длину массива purchaseItems и был заполнен нулями. То, как я пытался это сделать, это получить длину purchaseItems, создать дубликат priceArray с именем newArray, используя нули от l oop до pu sh в newArray, пока он не будет иметь ту же длину, что и buyItems, а затем добавление newArray к priceArray через setState. Однако priceArray остается пустым, когда я проверяю его через console.log. Почему это может быть? Я приложу код ниже.

Примечание: я планирую в конечном итоге заполнить buyItems из БД, поэтому длина массива purchaseItems не всегда будет одинаковой, поэтому я не пишу жестко, скажем, массив, полный нулей с длиной 5 для priceArray, если buyItems имеет длину 5.

Код из моего состояния:

  state = {};
  constructor(props) {
    super(props);
    this.state = {
      purchaseItems: [redacted],
      priceArray: [],
    };
  }

Код из моего componentDidMount ():

  componentDidMount() {
    console.log("Purchase Items: " + JSON.stringify(this.state.purchaseItems));
    const numItems = this.state.purchaseItems.length;
    console.log("numItems: " + numItems);
    var newArray = this.state.priceArray.slice();
    console.log("initialized newArray: " + JSON.stringify(newArray));
    var i;
    for (i = 0; i < numItems; i++) {
      newArray.push(0);
    }
    console.log("populated newArray: " + JSON.stringify(newArray));
    this.setState({ priceArray: [...this.state.priceArray, newArray] });
    console.log("priceArray: " + JSON.stringify(this.state.priceArray));
  }

Терминал:

Purchase Items: [redacted]
numItems: 6
initialized newArray: []
populated newArray: [0,0,0,0,0,0]
priceArray: []

1 Ответ

0 голосов
/ 27 апреля 2020

правильно установить состояние priceArray

this.setState({ priceArray: [...this.state.priceArray, ...newArray] },()=>console.log(his.state.priceArray));

Вы также можете выполнить всю операцию в одной строке

this.setState({priceArray:(new Array(this.state.purchaseItems.length)).fill(0))},()=>console.log(his.state.priceArray))
...