Повторение числового значения и отправка в качестве реквизита

#javascript #reactjs #typescript

#javascript #reactjs #typescript

Вопрос:

У меня есть массив со значениями, которые я использую forEach для передачи значений в качестве реквизита компоненту. Я также хочу отправлять значение в качестве реквизита и увеличивать его на 1 для каждой итерации. В настоящее время я пытался:

 this.state = {
 index: 0
}
 let news:any[] = []; //container for other items for the loop
let indx = this.state.index;

    this.state.listItems.forEach((myArrWItems) => {

      indx =  1;
      news.push(<MyComponent


        index = {indx}

        />);
    });
  

Однако значение, отправляемое в качестве реквизита, всегда равно 1. Любая помощь?

Ответ №1:

Ваша index переменная состояния там не нужна. Поскольку вы хотите создать массив из существующего, вы должны использовать map функцию, как показано в официальной документации.

Эта функция передаст вам index вашего элемента прямо в свой обратный вызов, в качестве второго аргумента.

Ваш код может быть сокращен до одной строки :

 const news = this.state.listItems.map((item, index) => <MyComponent key={index} index={index   1}/>)
  

Не забудьте задать key реквизит вашего компонента при создании массива.

<MyComponent index/> Синтаксис представляет собой сокращенную версию <MyComponent index={index}/>

Комментарии:

1. Согласен, карта была бы лучше. Думал использовать индексный параметр функций (у forEach он тоже есть), но он начинается с 0. Возможно ли заставить его начинаться с 1?

2. Конечно, только что отредактировал мой ответ. Вы можете использовать любое выражение, которое хотите, в фигурных скобках определения реквизита

Ответ №2:

Вы никогда не обновляете свою index переменную, вы просто присваиваете 1 indx переменной, которая никогда не изменяется. Что вам нужно, так это обновить ваше состояние и таким образом увеличить вашу indx переменную и поместить ваше значение в массив при setState обратном вызове, но я рекомендую вам использовать текущий элемент массива index в вашем forEach цикле, поскольку это лучший способ сделать то, что вы хотите :

 this.state.listItems.forEach((myListItem, index) => {
      news.push(<MyComponent
        key={index}
        index={index 1}
        />);
});
  

Комментарии:

1. Спасибо! Думал об использовании функции forEach Index, но она начинается с 0, но я хочу, чтобы она начиналась с 1. Возможно ли это?

2. Действительно, вы можете просто добавить index={index 1} к данному свойству. 😇