Оба типа, конечно, просто JavaScript, но первый шаблон - традиционный.
В любом случае, в JSX все, что заключено в фигурные скобки, выполняется как JavaScript, так что вы можете делать там все, что захотите. Но объединение JSX-строк и фигурных скобок - атрибуты не нужны.
В случае нескольких динамических классов все динамические классы должны приходить из состояния, то есть их невозможно использовать element.classList.add("my-class"); следовательно, учитывая:className={`wrapper searchDiv ${this.state.something ? "my-class " : ""} ${this.state.somethingElse ? "my-other-class " : ""}`}
Кевин Фарругия
className={'wrapper searchDiv} + this.state.isTrue ? 'my-class' : ' 'Это не работает Кто-нибудь может сказать почему?
kryptokinght
54
В зависимости от того, сколько динамических классов вам нужно добавить по мере роста вашего проекта, вероятно, стоит проверить имена классов полезности по JedWatson на GitHub. Он позволяет вам представлять ваши условные классы как объект и возвращает те, которые оценивают как true.
В качестве примера из документации React:
render (){var btnClass = classNames({'btn':true,'btn-pressed':this.state.isPressed,'btn-over':!this.state.isPressed &&this.state.isHovered
});return<button className={btnClass}>I'm a button!</button>;}
Поскольку React запускает повторную визуализацию при изменении состояния, имена ваших динамических классов обрабатываются естественным образом и обновляются в соответствии с состоянием вашего компонента.
Использование classNames для такой простой вещи является излишним. Избегайте его использования и выберите простой ответ dannyjolie
контрольный список
2
Вы уверены, что это простая вещь? Почти всегда вы хотите иметь полный контроль над тем, какие классы применяются к элементам.
Драгас
5
@checklist Я бы сказал, в противном случае, пакет classnames составляет 1,1 КБ до Gzipping (и половина КБ после Gzipping), не имеет никаких зависимостей и предоставляет намного более чистый API для манипулирования именами классов. Нет необходимости преждевременно оптимизировать что-то настолько маленькое, когда API гораздо более выразителен. При использовании стандартных манипуляций со строками вы должны помнить, что необходимо учитывать интервалы, либо перед каждым условным именем класса, либо после каждого стандартного имени класса.
августа
classNames великолепен, я обнаружил, что чтение, добавление и исправление реквизита были проще, чем ручные манипуляции, так как компонент усложнялся.
Вы можете использовать этот пакет npm. Он обрабатывает все и имеет параметры для статических и динамических классов, основанных на переменной или функции.
// Support for string arguments
getClassNames('class1','class2');// support for Object
getClassNames({class1:true, class2 :false});// support for all type of data
getClassNames('class1','class2',['class3','class4'],{
class5 :function(){returnfalse;},
class6 :function(){returntrue;}});<div className={getClassNames({class1:true, class2 :false})}/>
Ответы:
Вы можете сделать это, обычный JavaScript:
или версия строкового шаблона с обратными галочками:
Оба типа, конечно, просто JavaScript, но первый шаблон - традиционный.
В любом случае, в JSX все, что заключено в фигурные скобки, выполняется как JavaScript, так что вы можете делать там все, что захотите. Но объединение JSX-строк и фигурных скобок - атрибуты не нужны.
источник
element.classList.add("my-class")
; следовательно, учитывая:className={`wrapper searchDiv ${this.state.something ? "my-class " : ""} ${this.state.somethingElse ? "my-other-class " : ""}`}
className={'wrapper searchDiv} + this.state.isTrue ? 'my-class' : ' '
Это не работает Кто-нибудь может сказать почему?В зависимости от того, сколько динамических классов вам нужно добавить по мере роста вашего проекта, вероятно, стоит проверить имена классов полезности по JedWatson на GitHub. Он позволяет вам представлять ваши условные классы как объект и возвращает те, которые оценивают как true.
В качестве примера из документации React:
Поскольку React запускает повторную визуализацию при изменении состояния, имена ваших динамических классов обрабатываются естественным образом и обновляются в соответствии с состоянием вашего компонента.
источник
Простой возможный синтаксис будет:
источник
Вот лучший вариант для Dynamic className, просто сделайте конкатенацию, как мы делаем в Javascript.
источник
Если вам нужны имена стилей, которые должны отображаться в соответствии с состоянием состояния, я предпочитаю использовать эту конструкцию:
источник
попробуйте это с помощью хуков:
и добавьте это в атрибут className:
добавить класс:
удалить класс:
источник
Вы можете использовать этот пакет npm. Он обрабатывает все и имеет параметры для статических и динамических классов, основанных на переменной или функции.
источник
источник
Это решение опробовано и протестировано в React SPFx.
Также добавьте оператор импорта:
источник