Warnung: Unbekannte DOM-Eigenschaftsklasse. Meinten Sie className?


113

Ich habe gerade angefangen, React zu untersuchen, indem ich eine Komponente mit einer einfachen Renderfunktion hinzugefügt habe:

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

Wenn ich die App starte, wird folgende Fehlermeldung angezeigt:

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

Ich kann dies durch eine Änderung lösen classzu className.

Die Frage ist; setzt React diese Konvention durch? Auch warum muss ich classNameanstelle der herkömmlichen verwenden class? Wenn dies eine Einschränkung ist, liegt es dann an der JSX-Syntax oder an einem anderen Ort?

Antworten:


150

Ja, es ist eine Reaktionskonvention:

Da es sich bei JSX um JavaScript handelt, werden Bezeichner wie classund forals XML-Attributnamen nicht empfohlen. Stattdessen Reagieren DOM Komponenten DOM Eigenschaftsnamen erwarten wie classNameund htmlFordargestellt.

JSX im Detail .


9
Ich finde das schrecklich unintuitiv. Ich denke, der Parser sollte wissen, wie man Kontexte zwischen den beiden Sprachen basierend auf dem Kontext wechselt, den Programmierer und die Tools entlastet
Jonathan

13

Meteor verwendet babel, um ES5 auf ES6 (ES2015) zu transpilieren, sodass wir es als normale Knotenanwendung mit hinzugefügtem babel-Transpiler behandeln können.

Sie müssen eine .babelrcDatei zum Stammordner Ihres Projekts hinzufügen und die folgenden Elemente hinzufügen

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

Und natürlich müssen Sie dieses Plugin installieren mit npm:

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


Vielen Dank, ich kann "Invalid DOM" nach der Installation von react-facebook-login beheben.
Kakashi

12

In React.js sind keine for- und class-Eigenschaften verfügbar, daher müssen wir diese verwenden

for   --> htmlFor
class --> className

4

Sie können class nicht für HTML-Tag-Attribute verwenden, da JS eine andere Bedeutung für class hat. Deshalb müssen Sie className anstelle von class verwenden.

Verwenden Sie außerdem das Attribut htmlFor anstelle von for.


3

In HTML verwenden wir

class="navbar"

In React und ReactNative gibt es jedoch kein HTML. Wir verwenden hier JSX (Javascript XML)

className="navbar"

0

Die JSX-Syntax beim Kompilieren mit babel lautet die zugrunde liegende Syntax, die zum Erstellen des HTML-Elements verwendet wird

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

Wenn wir die Klasse anstelle von className verwenden, wird sie von der Reaktion als Javascript-Klasse anstelle des HTML-Klassenattributs abgeleitet. [Grund, warum der Variablenname 'Klasse' bereits in der Datei zum Erstellen einer Javascript-Klasse verwendet wird und für denselben Zweck reserviert ist]. Was falsch ist und der Compiler den Fehler auslöst, da die Javascript-Klasse keine gültige Eigenschaft für HTML-DOM-Elemente ist.

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

Daher ist es notwendig, className anstelle von class zu verwenden.

   React.createElement("p", {"className": "header"}, "Hello")
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.