Advertencia: clase de propiedad DOM desconocida. ¿Quiso decir className?

3 minutos de lectura

avatar de usuario
jsalonen

Acabo de comenzar a explorar React, agregando un componente con una función de renderizado simple:

render() {
  return <div class="myApp"></div>
}

Cuando ejecuto la aplicación, me sale el siguiente error:

Warning: Unknown DOM property class. Did you mean className?

Puedo resolver esto cambiando class a className.

La pregunta es; ¿React hace cumplir esta convención? Además, ¿por qué necesito usar className en lugar de lo convencional class? Si se trata de una restricción, ¿se debe a la sintaxis JSX o a algún otro lugar?

avatar de usuario
Viacheslav

Sí, es una convención React:

Dado que JSX es JavaScript, los identificadores como class y for se desaconsejan como nombres de atributo XML. En cambio, los componentes React DOM esperan nombres de propiedad DOM como className y htmlForrespectivamente.

JSX en profundidad.

  • Encuentro esto terriblemente poco intuitivo. Creo que el analizador debe saber cómo cambiar contextos entre los dos idiomas según el contexto, mantener la carga fuera del programador y de las herramientas.

    – Jonathan

    29 de enero de 2019 a las 18:37


  • De acuerdo, esto debería estar en las herramientas, aunque class es una palabra clave reservada en casi todos los lenguajes de programación y es bastante fácil de hacer Buscar class=Reemplazar className=

    –Jeremy Thompson

    16 de enero a las 11:39


En React.js no hay propiedades for y class disponibles, por lo que debemos usar

for   --> htmlFor
class --> className

avatar de usuario
curva segura

Meteor usa babel para transpilar ES5 a ES6 (ES2015), por lo que podemos manejarlo como una aplicación Node normal con babel transpiler agregado.

Necesitas agregar .babelrc archivo a la carpeta raíz de su proyecto y agregue los siguientes elementos

{
  "plugins": [
    "react-html-attrs"
  ]
}

Y, por supuesto, necesita instalar este complemento usando npm:

npm install –save-dev babel-plugin-react-html-attrs

  • Gracias, puedo arreglar “DOM no válido” después de instalar react-facebook-login.

    – Kakashi

    9 de febrero de 2018 a las 9:14

En HTML usamos

class="navbar"

pero en React y ReactNative no hay HTML, usamos JSX (Javascript XML) aquí usamos

className="navbar"

No puede usar clase para ningún atributo de etiqueta HTML porque JS tiene otro significado de clase. Por eso tienes que usar className en lugar de class.

Y también use el atributo htmlFor en lugar de for.

avatar de usuario
kodmanyagha

En reaccionar 16.13.1 puede usar el atributo de clase. Lanza una excepción de “advertencia” pero NO detiene la ejecución.

ingrese la descripción de la imagen aquí

avatar de usuario
Sasi Kumar M

La sintaxis JSX cuando se compila usando babel, la sintaxis subyacente que usará para crear el elemento HTML será

   React.createElement('div', {attributes}, "Hello");

Si usamos la clase en lugar de className, la reacción la inferirá como una clase javascript en lugar de un atributo de clase html. [Reason the variable name ‘class’ is already used in the file to create a javascript class and is reserved for the same purpose]. Lo cual es incorrecto y el compilador arroja el error, ya que la clase javascript no es una propiedad válida para los elementos DOM html.

   React.createElement("p", {"class": "header"}, "Hello");

Por lo tanto, es necesario usar className en lugar de class.

   React.createElement("p", {"className": "header"}, "Hello")

¿Ha sido útil esta solución?