Ich spiele mit dem ReactJS-Framework auf JSBin herum .
Ich habe festgestellt, dass mein Komponentenname, der mit einem Kleinbuchstaben beginnt, nicht funktioniert.
Zum Beispiel wird Folgendes nicht gerendert:
var fml = React.createClass({
render: function () {
return <a href='google.com'>Go</a>
}
});
React.render(<fml />, document.body);
Aber sobald ich ersetzen die fml
mit Fml
ihm nicht machen.
Gibt es einen Grund, warum ich Tags nicht mit kleinen Buchstaben beginnen kann?
javascript
reactjs
shaunakde
quelle
quelle
Antworten:
In JSX werden Tag-Namen in Kleinbuchstaben als HTML-Tags betrachtet. Tag-Namen in Kleinbuchstaben mit einem Punkt (Eigenschafts-Accessor) sind dies jedoch nicht.
Siehe HTML-Tags vs React Components .
<component />
Kompiliert zuReact.createElement('component')
(HTML-Tag)<Component />
kompiliert zuReact.createElement(Component)
<obj.component />
kompiliert zuReact.createElement(obj.component)
quelle
let component = components[compType]; <component/>
und bekam Unsinnfehler.<components[name] />
was auch nicht funktioniert.Components
stattdessencomponents
die schöne Website ohne Fehler, aber ohne Inhalt geladen wird!@Alexandre Kirszenberg gab eine sehr gute Antwort, wollte nur ein weiteres Detail hinzufügen.
React enthielt früher eine Whitelist bekannter Elementnamen wie
div
etc, mit der zwischen DOM-Elementen und React-Komponenten unterschieden wurde.Da das Verwalten dieser Liste nicht allzu viel Spaß macht und Webkomponenten das Erstellen benutzerdefinierter Elemente ermöglichen, wurde die Regel festgelegt, dass alle React-Komponenten mit einem Großbuchstaben beginnen oder einen Punkt enthalten müssen .
quelle
Aus der offiziellen React-Referenz :
Beachten Sie auch Folgendes:
Was bedeutet, dass man verwenden muss:
const Foo = foo;
vor der Verwendungfoo
als Komponentenelement in JSX.quelle
Der erste Teil eines
JSX
Tags bestimmt den Typ des React-Elements. Grundsätzlich gibt es eine Konvention Groß- und Kleinschreibung .Aktiviert und Punktnotation Typen zeigen an, dass der
JSX
Tag eine Komponente bezieht Reaktion, wenn Sie also die JSX verwenden<Foo />
kompilierenReact.createElement(Foo)
ODER
<foo.bar />
kompilierenReact.createElement(foo.bar)
und entspricht eine Komponente definiert oder importiert in Ihrer JavaScript - Datei.Während der Kleinbuchstaben-Typ auf eine integrierte Komponente wie
<div>
oder hinweist<span>
und zu einer Zeichenfolge führt'div'
oder an'span'
übergeben wirdReact.createElement('div')
.Reagieren Sie, Komponenten mit einem Großbuchstaben zu benennen. Wenn Sie eine Komponente haben, die mit einem Kleinbuchstaben beginnt, weisen Sie sie einer großgeschriebenen Variablen zu, bevor Sie sie in verwenden
JSX
.quelle
In JSX werden Reaktionsklassen großgeschrieben, um XML-kompatibel zu machen, damit sie nicht mit einem HTML-Tag verwechselt werden. Wenn die Reaktionsklassen nicht groß geschrieben werden, handelt es sich um ein HTML-Tag als vordefinierte JSX-Syntax.
quelle