class
est un mot clé en javascript et JSX est une extension de javascript. C'est la raison principale pour laquelle React utilise className
au lieu de class
.
Rien n'a changé à cet égard.
Pour développer ce point un peu plus. A mot-clé signifie qu'un token a une signification particulière dans la syntaxe d'un langage. Par exemple dans :
class MyClass extends React.Class {
Token class
indique que le jeton suivant est un identifiant et que ce qui suit est une déclaration de classe. Voir Mots clés Javascript + mots réservés .
Le fait qu'un token soit un mot-clé signifie que nous ne pouvons pas l'utiliser dans certaines expressions, par ex.
// 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';
L'un des problèmes est que personne ne peut savoir si un autre problème ne se posera pas à l'avenir. Chaque langage de programmation est en constante évolution et class
peut en fait être utilisé dans une nouvelle syntaxe conflictuelle.
De tels problèmes n'existent pas avec className
.
0 votes
ClassName est le seul attribut supporté, mais dans la v16 un changement est intervenu pour les "Attributs connus avec un nom canonique React différent". Dans la v15, React avertit et les ignore, dans la v16, il avertit mais convertit les valeurs en chaînes de caractères et les transmet. La documentation donne une réponse claire à votre question : "toujours utiliser le nom canonique de React pour tous les attributs supportés". Voir reactjs.org/blog/2017/09/08/