@IT_OSNOVA

Как добавлять react-атрибуты по условию?

Доброго времени суток.

Есть компонент, который отвечает за вывод пагинации.
В return компонента пагинация выводится следующим образом:
return (
            <div className = "Question-list">
                {this.props.data.map((value, index) => <li onClick = {this.setChosenQuestionNumber}
                                                           key = {this.props.data[index]['id']}
                                                           className="Question-list-item">
                                                                <span className="question-list-number">{index + 1}
                                                                </span>
                                                           </li>)}
            </div>
        )


В зависимости от приходящего в компонент props (массив) нужно присваивать кнопке пагинации (<li>) тот или иной класс.

Подскажите, пожалуйста, как это сделать.
  • Вопрос задан
  • 5126 просмотров
Решения вопроса 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
Вариант 1:
<li className={someCondition ? someClass : someOtherClass} />

где someCondition условие, например:
someProp === SOME_CONSTRANT

Вариант2:
<li className={getClassName(someProp)} />

Вы передаете в вызове map элемент первым аргументом, но при этом обращаетесь к нему через массив:
key = {this.props.data[index]['id']}
очень нелогичный ход, исправьте на:
key = {value.id}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@lnked
return (
    <div className="Question-list">
        {this.props.data.map((value, index) => {
            const cn = []

            if (value === 1) {
                cn.push('Question-list-item--current')
            }
            else {
                cn.push('Question-list-item')
            }

            return <li onClick={this.setChosenQuestionNumber} key={value.id} className={cn.join(' ')}>
                <span className="question-list-number">{index + 1}</span>
            </li>
        })}
    </div>
)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы