É claro que ambos os tipos são apenas JavaScript, mas o primeiro padrão é o tipo tradicional.
De qualquer forma, no JSX, tudo o que estiver entre colchetes é executado como JavaScript, para que você possa basicamente fazer o que quiser lá. Mas combinar seqüências de caracteres JSX e colchetes não é obrigatório para atributos.
No caso de várias classes dinâmicas, todas as classes dinâmicas devem ser provenientes do estado, ou seja, não é possível usar element.classList.add("my-class"); permitindo, portanto:className={`wrapper searchDiv ${this.state.something ? "my-class " : ""} ${this.state.somethingElse ? "my-other-class " : ""}`}
Kevin Farrugia
className={'wrapper searchDiv} + this.state.isTrue ? 'my-class' : ' 'Isso não funciona. Alguém pode dizer o porquê?
Kryptokinght
54
Dependendo de quantas classes dinâmicas você precisa adicionar à medida que seu projeto cresce, provavelmente vale a pena conferir o utilitário classnames de JedWatson no GitHub. Ele permite que você represente suas classes condicionais como um objeto e retorna as que são avaliadas como verdadeiras.
Então, como um exemplo da documentação do 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>;}
Como o React aciona uma nova renderização quando há uma alteração de estado, os nomes de classes dinâmicas são manipulados naturalmente e atualizados com o estado do seu componente.
O uso de classNames para uma coisa tão simples é um exagero. Evite usá-lo e opte pela resposta simples de dannyjolie
check
2
Tem certeza de que é uma coisa simples? Quase sempre, você deseja ter um controle total de baixa granularidade sobre quais classes são aplicadas aos elementos.
Dragas 26/06
5
@checklist Eu diria o contrário, o pacote classnames é 1.1kB antes do Gzipping (e meio kB depois do Gzipping), não tem dependências e fornece uma API muito mais limpa para a manipulação do nome da classe. Não há necessidade de otimizar prematuramente algo tão pequeno, quando a API é muito mais expressiva. Ao usar a manipulação de seqüência de caracteres padrão, lembre-se de considerar o espaçamento, antes de cada nome de classe condicional ou após cada nome de classe padrão.
Tomhughes
classNames é ótimo, achei que ler, adicionar e corrigir adereços eram mais fáceis do que a manipulação manual, pois o componente aumentava em complexidade.
Você pode usar este pacote npm. Ele lida com tudo e tem opções para classes estáticas e dinâmicas com base em uma variável ou uma função.
// 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})}/>
Respostas:
Você pode fazer isso, JavaScript normal:
ou a versão do modelo de string, com reticulares:
É claro que ambos os tipos são apenas JavaScript, mas o primeiro padrão é o tipo tradicional.
De qualquer forma, no JSX, tudo o que estiver entre colchetes é executado como JavaScript, para que você possa basicamente fazer o que quiser lá. Mas combinar seqüências de caracteres JSX e colchetes não é obrigatório para atributos.
fonte
element.classList.add("my-class")
; permitindo, portanto:className={`wrapper searchDiv ${this.state.something ? "my-class " : ""} ${this.state.somethingElse ? "my-other-class " : ""}`}
className={'wrapper searchDiv} + this.state.isTrue ? 'my-class' : ' '
Isso não funciona. Alguém pode dizer o porquê?Dependendo de quantas classes dinâmicas você precisa adicionar à medida que seu projeto cresce, provavelmente vale a pena conferir o utilitário classnames de JedWatson no GitHub. Ele permite que você represente suas classes condicionais como um objeto e retorna as que são avaliadas como verdadeiras.
Então, como um exemplo da documentação do React:
Como o React aciona uma nova renderização quando há uma alteração de estado, os nomes de classes dinâmicas são manipulados naturalmente e atualizados com o estado do seu componente.
fonte
Uma simples sintaxe possível será:
fonte
Aqui está a melhor opção para o className dinâmico, basta fazer uma concatenação como fazemos em Javascript.
fonte
Se você precisar de nomes de estilo que devem aparecer de acordo com a condição de estado, prefiro usar esta construção:
fonte
tente isso usando ganchos:
e adicione isso no atributo className:
para adicionar classe:
para excluir a classe:
fonte
Você pode usar este pacote npm. Ele lida com tudo e tem opções para classes estáticas e dinâmicas com base em uma variável ou uma função.
fonte
fonte
Esta solução é experimentada e testada no React SPFx.
Adicione também a declaração de importação:
fonte