@mishapsv

Как менять класс исходя из содержания массива данных в React?

Есть некоторый джейсон-массив и исходя из его содержимого кнопки должны менять цвет.
Это видимо просто, но не получается реализовать.
Здесь написал через оператор ?, но больше одного условия не выполняется. Да и не правильно это, нужно выносить.
Если выносить в переменную, которую затем подставлять className={переменная}, то получается массив нужно еще раз перебирать.
Как бы вы это написали?
  • Вопрос задан
  • 269 просмотров
Решения вопроса 2
rajdee
@rajdee
Front-end developer
Если уникальный класс всего один, то проще всего через switch/case или reduce, но если таких классов много, то чем обходить массив, лучше обращаться по ключу:
const statuses = {
'new_message': ["Новое сообщение", "btn-default"],
'pay': ["Оплатить", "btn-primary"]
...
};

className={statuses[box.btn1][1]}


Можно конечно оставить ключами и кириллические статусы, но это менее надежно, как мне кажется.

Можно еще хранить текст кнопки и класс не в массиве, а во вложенном объекте, для лучшей читаемости

P.S. Добавил пример
Ответ написан
Есть замечательный пакет classnames, который позволяет удобно создавать строку классов из объекта по условию.
И получаем:
{ boxes.map(box => (
  <button type="button" className={classNames({
    'btn': true,
    'btn-default': box.btn1 === 'Новое сообщение',
    'brn-primary': box.btn1 !== 'Новое сообщение'
  })}>
    ывыв
  </button>
                                            
)) }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mmmaaak
@mmmaaak
Рассчитайте имя класса в переменную в методе render до вызова return, с помощью какого-нибудь switch/case, а потом его просто вставьте в шаблон где надо
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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