Как я могу сделать функцию карты внутри lodash .times - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь создать функцию сопоставления для элементов, которые я получаю из ответа API внутри _.times, но это не работает, возможно ли это, я просто хочу сделать уникальный идентификатор для каждого элемента исравнить каждый идентификатор с this.state.selected в className каждого элемента

<div className="items">
  {_.times(this.state.items.length, j => ({this.state.items.map(i =><a href="/" id={j} onClick={this.targetValue} className={this.state.selected === j ? "selected" : ""}>{i.name}</a>)}))}
</div>

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Как упоминалось в комментарии Win, проще всего было бы просто использовать обычный вызов _.map() над this.state.items и использовать индекс каждого элемента массива для установки идентификатора.Имейте в виду, что lodash почти всегда предоставляет два аргумента при итерации: в массивах это (value, index) и в объектах это (value, key).

В этом случае вы можете сделать что-то вроде:

<div className="items">
  {_.map(this.state.items, (item, index) =>{
    return(
    <a href="/" id={index} onClick={this.targetValue} className={this.state.selected === index ? "selected" : ""}>{item.name}</a>
    );
  });
  }
</div>

Это помогает?

0 голосов
/ 15 октября 2018

Работает нормально -

    render() {
       return (_.times(this.state.items.length, j => this.state.items.map(i => <div>
          <a id={j} href="" className={j === this.state.selected ? "selected": ""}>{i}</a> . 
       </div>)))
    }

https://jsfiddle.net/kpcqn7wb/

Обратите внимание, что ваша переменная "j" не уникальна - это индекс счетчика вызова функции, вызванной для _.times, поэтому id attr не будет уникальным.

...