Согласен, на своём опыте столкнулся с подобным, подсмотрел решение у shadcn/ui, там похожая функция используется) Изначально я не хотел признавать легитимность tailwind, но когда попробовал, в целом норм, неудобств не вызывает. Но вот такие костыли нужны, да
зачем ещё ставить clsx или className, когда можно написать максимально просто и будет работать быстрее нет поддержки объектов, но к этому можно привыкнуть import { ClassNameValue, twMerge } from "tailwind-merge"; export const cn = (...args: ClassNameValue[]) => { return twMerge(args.filter(Boolean)); };
Соглашусь, выглядит красиво) Объекты мы у себя в команде оставили из-за удобства чтения. Тут кому как нравится) А в плане скорости я даже особой разницы между 'classnames' и 'clsx' не видел, но команда настояла на переход к более оптимизированной либе, а я и не стал спорить). В любом случае, в текущих проектах такой уровень оптимизации мне пока не приходилось применять)
Вы про библиотеку 'classnames'? Когда-то мне коллега по работе посоветовал 'clsx' библиотеку как более производительную альтернативу 'classnames' (бенчмарки: github.com/lukeed/clsx/tree/42354d3b81abd5044f947f93e528351e27e9a12a/bench), поэтому перешел на нее. А у 'tw-merge' другое предназначение - решение коллизий (конфликтов) классов.
Круто что вырезана вся вода из речи, слушать приятно, спасибо за старания
Очень классные штуки, узкоспециализированные, но очень полезно, спасибо.
Маестро снова в деле 👌🏻
Отличная подача без воды. Ждем еще видосов на тему React)
Согласен, на своём опыте столкнулся с подобным, подсмотрел решение у shadcn/ui, там похожая функция используется)
Изначально я не хотел признавать легитимность tailwind, но когда попробовал, в целом норм, неудобств не вызывает. Но вот такие костыли нужны, да
Спасибо)
зачем ещё ставить clsx или className, когда можно написать максимально просто и будет работать быстрее
нет поддержки объектов, но к этому можно привыкнуть
import { ClassNameValue, twMerge } from "tailwind-merge";
export const cn = (...args: ClassNameValue[]) => {
return twMerge(args.filter(Boolean));
};
Соглашусь, выглядит красиво) Объекты мы у себя в команде оставили из-за удобства чтения. Тут кому как нравится) А в плане скорости я даже особой разницы между 'classnames' и 'clsx' не видел, но команда настояла на переход к более оптимизированной либе, а я и не стал спорить). В любом случае, в текущих проектах такой уровень оптимизации мне пока не приходилось применять)
почему не classNames а tw-merge?
Вы про библиотеку 'classnames'? Когда-то мне коллега по работе посоветовал 'clsx' библиотеку как более производительную альтернативу 'classnames' (бенчмарки: github.com/lukeed/clsx/tree/42354d3b81abd5044f947f93e528351e27e9a12a/bench), поэтому перешел на нее. А у 'tw-merge' другое предназначение - решение коллизий (конфликтов) классов.
Странновато звучит "Tailwind кодеру" )) типа как "CSS-программист" 😄