Unterschied zwischen Reagieren Komponente und Reagieren Element
Was ist der Unterschied zwischen Reagieren Komponente und Reagieren Element? Die Dokumentation erwähnt, aber nicht ins detail gehen, einige Methoden erfordern Komponenten, andere Elemente...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Betrachten die Komponente als eine Klasse und Element, wie eine Instanz. Das ist es!
Gibt es drei Verwandte Arten der Sache hier beteiligt sind, mit Ihren eigenen Namen:
Dies ist etwas überraschend, da, wenn Sie verwendet, um zu anderen UI-frameworks, die Sie möglicherweise erwarten, dass es würde nur zwei Arten von Sache, entspricht etwa Klassen (wie
Widget
) und Instanzen (wienew Widget()
). Das ist nicht der Fall, Reagieren, Komponenten-Instanzen sind nicht das gleiche wie die Elemente, noch ist es eine eins-zu-eins-Beziehung zwischen Ihnen. Um dies zu veranschaulichen, betrachten Sie diesen code:In den obigen code:
MyComponent
(die Klasse selbst) ist eine Komponenteelement
ist ein Element. Es ist nicht eine Instanz vonMyComponent
; eher, es ist einfach eine Beschreibung die Instanz der Komponente erstellt werden. Es ist ein Objekt mitkey
,props
,ref
undtype
Eigenschaften. Hierkey
undref
sindnull
,props
ist ein leeres Objekt, undtype
istMyComponent
.MyComponent
angelegt wird (und in dem oben genannten Beispiel, loggt sich von seinem Konstruktor), wennelement
gerendert wird.another_element
ist auch ein element, und hatkey
,ref
,props
undtype
Eigenschaften wieelement
tut - aber dieses mal den Wert vontype
ist der string"div"
.Design-Gründe warum Reagieren hat diese drei Konzepte sind im detail erforscht, die in das React-team-blog-post Reagieren, Komponenten, Elemente und Instanzen, dem empfehle ich die Lektüre.
Schließlich, es sollte angemerkt werden, dass, während die offiziellen docs sind strenge über die Verwendung des Begriffs "Komponente" bezieht sich auf eine Funktion oder Klasse und die "Komponenten-Instanz" bezieht sich auf eine Instanz, die andere Quellen nicht unbedingt einhalten dieser Terminologie; Sie sollten erwarten, finden Sie unter "Komponente" verwendet wird (falsch) zu verstehen, "Komponenteninstanz" beim Lesen von Stack Overflow Antworten oder Diskussionen auf GitHub.
<Child/>
aus seinerrender()
Methode, jedes mal, wennrender()
heißt, es ist wieder ein neues element, sondern eine bereits bestehendeChild
- Komponente wieder verwendet werden kann, um zu erkennen, dass element.)el = <SomeComponent>
- dann einbetten, dass ein element mehrfach in einigen großen JSX Ausdruck, der zurückgegeben wird, durch einenrender()
- Methode (die ist, tun<div>{el}{el}{el}{el}</div>
).Näher auf die Antwort ein, Reagieren Element hat keine Methoden, und nichts auf dem Prototyp. Das macht Sie auch schnell.
"Ein ReactElement ist ein Licht, staatenlos, unveränderlich, virtuelle Darstellung eines DOM-Elements" - https://facebook.github.io/react/docs/glossary.html#react-elements
Einen reagieren Komponente
render()
- Funktion gibt einen DOM-Baum zu reagieren Elemente hinter den kulissen (das ist der virtuelle DOM btw). Es gibt einige komplexe mapping und diff Logik, aber im Grunde haben diese Reagieren Elemente anzeigen, um die DOM-Elemente.Können Sie auch ein Element direkt
React.createElement(arg)
wo arg kann ein html-tag-Namen, oder eine Reagieren Component-Klasse.Reagieren Elemente
Einen Reagieren Element ist nur ein plain old JavaScript
Object
ohne eigenen Methoden. Es hat im wesentlichen vier Eigenschaften:type
eineString
repräsentiert ein HTML-tag oder einen Verweis bezieht sich auf einen Reagieren Komponentekey
eineString
eindeutig zu identifizieren, die ein Reagieren Elementref
eine Referenz zum Zugriff entweder auf das zugrunde liegende DOM-Knoten oder Reagieren Komponente Instanz)props
(EigenschaftenObject
)Einen Reagieren Element ist keine Instanz von a Reagieren Komponente. Es ist nur eine vereinfachte "Beschreibung", wie die Reagieren Komponente Instanz (oder je nach
type
einen HTML-tag) erstellt werden, Aussehen sollte.Einen Reagieren Element, das beschreibt, Reagieren Komponente nicht kennen, um die DOM-Knoten ist es schließlich gerendert - diese Assoziation wird abstrahiert und gelöst werden, während rendering.
Reagieren Elemente können child-Elemente enthalten und sind somit fähig, die element Bäume, die stellen die Virtuellen DOM-Baum.
Komponenten reagieren und Reagieren Komponenteninstanzen
Einer benutzerdefinierten Reagieren Komponente ist entweder erstellt durch
React.createClass
oder durch die AusweitungReact.Component
(ES2015). Wenn ein Reagieren Komponente instanziiert wird, wird es erwartet, dass einprops
Object
und gibt eine Instanz, die bezeichnet wird als ein Reagieren Komponenteninstanz.Einen Reagieren Komponente enthalten kann, die Zustand und hat Zugriff auf das Reagieren Lifecycle-Methoden. Es muss mindestens ein
render
Methode, die gibt einen Reagieren Element(-Baum) wenn Sie aufgerufen wird. Bitte beachten Sie, dass Sie nie konstruieren Reagieren Komponente Instanzen selbst, aber lassen Sie Reagieren erstellen es für Sie.React Element
- Es ist ein einfaches Objekt, das beschreibt, einen DOM-Knoten und deren Attribute oder Eigenschaften, die Sie sagen kann. Es ist eine unveränderliche Beschreibung Objekt und Sie können nicht für alle Methoden.Eg -
React Component
- Es ist eine Funktion oder Klasse, die akzeptiert eine Eingabe und gibt eine Reagieren element. Es hat zu halten, Verweise auf die DOM-Knoten und an die Instanzen der Kind-Komponenten.Einer Komponente ist eine Fabrik für die Erstellung der Elemente.
Einen
React Element
ist, was würden Sie erachten eine grundlegende html-dom(um genau zu sein) - element. Es ist einfach eine Möglichkeit schaffen, element, ohne mit dem viel umstrittenen jsx-format.Einen
React Component
ist, was Sie betrachten können, als ein Objekt. Es hat seine Methoden, unterstütztReact lifecycles
und ist in der Regel unreusable (zumindest habe keine gefunden die Wiederverwendung noch, willkommen Beispiele). Es braucht unbedingt eine render-Funktion.Einen
React Class
ist, was Sie nennen eine Klasse. Funktionalität klugReact Class
undReact Component
sind die gleichen. Nur die syntax ist die echte Veränderung, wieReact Component
basiert aufES6 syntax
. Eine wesentliche änderung ist die Belegung der Funktionen ist dies nicht mehr unterstützt, es sei denn, mit den Pfeiltasten Funktionen.Mixins
auch nicht mehr unterstützt werden als vonES6
.Einer element ist ein einfaches Objekt, das beschreibt, was Sie wollen, werden auf dem Bildschirm in Bezug auf die DOM-Knoten oder andere Komponenten. Elemente können andere Elemente enthalten, die in Ihrer Requisiten. Erstellen einer Reagieren element ist Billig. Sobald ein element erstellt wird, wird es nie mutiert. Die Objekt-Darstellung Reagieren element wäre wie folgt,
Den oben createElement kehrt als Objekt, wie unten,
Und schließlich macht es der DOM mit ReactDOM.render, da unten,
In der Erwägung, dass eine Komponente deklariert werden kann auf verschiedene Weise erfolgen. Kann es sein, dass eine Klasse eine render () - Methode. Alternativ dazu können Sie in einfachen Fällen, kann es als eine Funktion definiert werden. In jedem Fall, es dauert Requisiten als Eingabe und gibt ein-element-Baum als Ausgang. JSX transpiled wie createElement am Ende.
Reagieren Komponenten sind veränderlich, während die Elemente sind nicht