JS: React
2026-02-26 17:06 Diff

Интерактивные элементы UI имеют более одного состояния отображения. Например, модальное окно может быть открыто или закрыто, а переключатель — включён или выключен. Обычно эти состояния меняют с помощью классов.

Работая напрямую с DOM, мы можем использовать classList, который содержит удобные методы для добавления и удаления классов. В React из коробки нет никаких удобств. Свойство className — это всего лишь строка, а строки неудобны для обработки:

Для решения этой задачи создатели React рекомендуют использовать пакет classnames. Принцип его работы прост. Вместо манипулирования строчкой напрямую, мы формируем правильный объект, который уже будет преобразован в строку:

Подставим конкретные значения:

Функция cn() принимает на вход любое количество аргументов. Если аргумент имеет строковой тип, то он считается обязательным классом. Если это объект, тогда работает логика, описанная выше:

Обязательные классы можно задавать и в самом объекте:

Иногда имя класса генерируется динамически, тогда можно использовать следующий код:

Функция умеет работать с массивами. Массив можно передавать в любом параметре: