Vi que React 16 permite que los atributos se pasen al DOM. Entonces, eso significa que se puede usar 'clase' en lugar de className, ¿verdad?
Me pregunto si hay ventajas de seguir usando className sobre class, además de ser compatible con versiones anteriores de React.
Respuestas:
class
es una palabra clave en javascript y JSX es una extensión de javascript. Esa es la razón principal por la que React usa enclassName
lugar declass
.Nada ha cambiado en ese sentido.
Para expandir esto un poco más. Una palabra clave significa que un token tiene un significado especial en la sintaxis de un idioma. Por ejemplo en:
class MyClass extends React.Class {
Token
class
denota que el siguiente token es un identificador y lo que sigue es una declaración de clase. Consulte Palabras clave de Javascript + Palabras reservadas .El hecho de que un token sea una palabra clave significa que no podemos usarlo en algunas expresiones, p. Ej.
// invalid in older versions on Javascript, valid in modern javascript const props = { class: 'css class' } // valid in all versions of Javascript const props = { 'class': 'css class' }; // invalid! var class = 'css'; // valid var clazz = 'css'; // invalid! props.class = 'css'; // valid props['class'] = 'css';
Uno de los problemas es que nadie puede saber si no surgirá algún otro problema en el futuro. Todos los lenguajes de programación aún están evolucionando y
class
se pueden usar en alguna sintaxis nueva en conflicto.No existen tales problemas con
className
.fuente
props.class = 'css'
esto es totalmente válidoEl equipo de React realmente cambiará a en
class
lugar declassName
en el futuro próximo ( fuente ):¿Por qué cambiar y no admitir ambos?
Así que deberías estar atento.
Todavía lo usaría
className
siempre que esto sea lo que espera la API.fuente
class
que no se puede usar en muchas expresiones porque es una palabra clave.Solo para arrojar un poco más de luz, además de las otras buenas respuestas ya dadas:
http://buildwithreact.com/tutorial/jsx
Además, para citar a zpao (un colaborador de React / empleado de Facebook)
fuente
Los documentos de React recomiendan el uso de
cannonical React attribute
nombres en lugar de los nombres convencionales de Javascript, por lo que incluso cuando React permite que los atributos se pasen a DOM, le dará una advertencia.De los documentos:
Known attributes with a different canonical React name: <div tabindex="-1" /> <div class="hi" /> React 15: Warns and ignores them. React 16: Warns but converts values to strings and passes them through. Note: always use the canonical React naming for all supported attributes.
fuente
a partir de junio de 2019, el proceso de cambio de className a class se detuvo, podría continuar más tarde
aquí está la publicación de facebook dev explica por qué
https://github.com/facebook/react/issues/13525
fuente
Class versus className en reactJS La clase es una palabra reservada o palabra clave en reactJS tanto como función en el javascript. Es por eso que usamos la palabra "className" para referirnos a la clase.
fuente
No hay una explicación real por parte del equipo de React sobre esto, pero se podría suponer que se diferencia de la palabra clave reservada "clase" en Javascript desde su introducción en ES2015 +.
Incluso si usa "clase" en la configuración del elemento mientras crea el elemento, no arrojará ningún error de compilación / representación.
fuente
En ReactJS, estamos tratando con JSX y no con HTML como todos ustedes saben. ¡El JSX quiere que use className porque es una API DOM de JavaScript subyacente! class siendo una palabra clave reservada en JS no es la razón principal por la que no estamos usando class y, en su lugar, usamos className. Es porque nos referimos a esa API DOM
fuente