Задать вопрос
@wakenbyWork

Как в react ставить класс по условию?

Есть кнопки для фильтрации, и активной кнопке необходимо добавлять активный класс.

Интерфейс

620820ea11b97646353399.png


Видел что кнопки выносят в массив объектов и выводят их, внутри уже по условию накидывают класс, сделал так-же:

import { useDispatch, useSelector } from 'react-redux'
import { filter } from '../store/todoSlice'

const TodoFilter = () => {
  const dispatch = useDispatch()
  const activeBtn = useSelector(state => state.todos.keyFilter)
  
  const handleFilter = (key) => {
    dispatch(filter({ key }))
  }
  
  const listBtns = [
    {
      name: 'Все',
      key: 'all'
    },
    {
      name: 'Выполненные',
      key: 'completed'
    },
    {
      name: 'Не выполненные',
      key: 'uncompleted'
    }
  ]
  
  return (
    <div className='btn-group d-flex mb-3'>
      {
        listBtns.map(btn => {
          let clazz = ''
          
          if (activeBtn === btn.key) clazz = 'active'
          
          return (
            <button
              onClick={() => handleFilter(btn.key)}
              className={`shadow-none btn btn-outline-primary ${clazz}`}
            >
              {btn.name}
            </button>
          )
        })
      }
    </div>
  )
}

export default TodoFilter


Правильно ли так делать?
  • Вопрос задан
  • 119 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
Hecc
@Hecc
Frontend. Дизайн. Шрифт.
Можно использовать очень простую, но удобную библиотечку, которая называется classnames.
<button
    onClick={() => handleFilter(btn.key)}
    className={ classnames('shadow-none', 'btn', 'btn-outline-primary', { active: activeBtn === btn.key }) }
>
    {btn.name}
</button>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Archi88
@Archi88
trainee JS
onClick={() => handleFilter(btn.key)}
className={`shadow-none btn btn-outline-primary ${clazz}`}
activeClassName={'active'}
>
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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