Por supuesto, ambos tipos son solo JavaScript, pero el primer patrón es el tradicional.
De todos modos, en JSX, cualquier cosa entre corchetes se ejecuta como JavaScript, por lo que básicamente puede hacer lo que quiera allí. Pero la combinación de cadenas JSX y llaves no es una opción para los atributos.
En el caso de múltiples clases dinámicas, todas las clases dinámicas deben provenir del estado, es decir, no es posible utilizarlas element.classList.add("my-class"); por lo tanto permitiendo:className={`wrapper searchDiv ${this.state.something ? "my-class " : ""} ${this.state.somethingElse ? "my-other-class " : ""}`}
Kevin Farrugia
className={'wrapper searchDiv} + this.state.isTrue ? 'my-class' : ' 'Esto no funciona ¿Alguien puede decir por qué?
kryptokinght
54
Dependiendo de cuántas clases dinámicas necesite agregar a medida que su proyecto crezca, probablemente valga la pena consultar la utilidad de nombres de clase de JedWatson en GitHub. Le permite representar sus clases condicionales como un objeto y devuelve las que evalúan como verdaderas.
Entonces, como ejemplo de su documentación 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>;}
Dado que React activa una nueva representación cuando hay un cambio de estado, los nombres de clase dinámicos se manejan de forma natural y se mantienen actualizados con el estado de su componente.
El uso de classNames para una cosa tan simple es una exageración. Evite usarlo y opte por la respuesta simple de dannyjolie
lista de verificación del
2
¿Estás seguro de que es algo simple? Casi siempre desea tener un control total de grano fino sobre qué clases se aplican a los elementos.
Dragas
55
@checklist Yo diría lo contrario, el paquete de nombres de clase es 1.1kB antes de Gzipping (y medio kB después de Gzipping), no tiene dependencias y proporciona una API mucho más limpia para la manipulación de nombres de clase. No hay necesidad de optimizar prematuramente algo tan pequeño, cuando la API es mucho más expresiva. Cuando utilice la manipulación de cadenas estándar, debe recordar tener en cuenta el espaciado, ya sea antes de cada nombre de clase condicional o después de cada nombre de clase estándar.
tomhughes
classNames es genial, descubrí que leer, agregar y arreglar accesorios eran más fáciles que la manipulación manual a medida que el componente crecía en complejidad.
Puede usar este paquete npm. Maneja todo y tiene opciones para clases estáticas y dinámicas basadas en una variable o una función.
// 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})}/>
Respuestas:
Puedes hacer esto, JavaScript normal:
o la versión de la plantilla de cadena, con backticks:
Por supuesto, ambos tipos son solo JavaScript, pero el primer patrón es el tradicional.
De todos modos, en JSX, cualquier cosa entre corchetes se ejecuta como JavaScript, por lo que básicamente puede hacer lo que quiera allí. Pero la combinación de cadenas JSX y llaves no es una opción para los atributos.
fuente
element.classList.add("my-class")
; por lo tanto permitiendo:className={`wrapper searchDiv ${this.state.something ? "my-class " : ""} ${this.state.somethingElse ? "my-other-class " : ""}`}
className={'wrapper searchDiv} + this.state.isTrue ? 'my-class' : ' '
Esto no funciona ¿Alguien puede decir por qué?Dependiendo de cuántas clases dinámicas necesite agregar a medida que su proyecto crezca, probablemente valga la pena consultar la utilidad de nombres de clase de JedWatson en GitHub. Le permite representar sus clases condicionales como un objeto y devuelve las que evalúan como verdaderas.
Entonces, como ejemplo de su documentación React:
Dado que React activa una nueva representación cuando hay un cambio de estado, los nombres de clase dinámicos se manejan de forma natural y se mantienen actualizados con el estado de su componente.
fuente
Una sintaxis simple posible será:
fuente
Aquí está la mejor opción para Dynamic ClassName, solo haga una concatenación como lo hacemos en Javascript.
fuente
Si necesita nombres de estilo que deberían aparecer de acuerdo con la condición de estado, prefiero usar esta construcción:
fuente
intente esto usando ganchos:
y agregue esto en el atributo className:
para agregar clase:
para eliminar la clase:
fuente
Puede usar este paquete npm. Maneja todo y tiene opciones para clases estáticas y dinámicas basadas en una variable o una función.
fuente
fuente
Esta solución se ha probado en React SPFx.
También agregue la declaración de importación:
fuente