Die Hauptaufgabe von React besteht darin, herauszufinden, wie das DOM so geändert werden kann, dass es den Komponenten entspricht, die auf dem Bildschirm gerendert werden sollen.
Reagieren Sie dazu, indem Sie "einhängen" (Knoten zum DOM hinzufügen), "aushängen" (aus dem DOM entfernen) und "aktualisieren" (Änderungen an Knoten vornehmen, die sich bereits im DOM befinden).
Wie ein Reaktionsknoten als DOM-Knoten dargestellt wird und wo und wann er im DOM-Baum angezeigt wird, wird von der API der obersten Ebene verwaltet . Schauen Sie sich das einfachste Beispiel an, um eine bessere Vorstellung davon zu bekommen, was los ist:
// JSX version: let foo = <FooComponent />;
let foo = React.createElement(FooComponent);
Was ist foo
und was können Sie damit machen? foo
Im Moment handelt es sich um ein einfaches JavaScript-Objekt, das ungefähr so aussieht (vereinfacht):
{
type: FooComponent,
props: {}
}
Es befindet sich derzeit nirgendwo auf der Seite, dh es ist kein DOM-Element, existiert nirgendwo im DOM-Baum und hat, abgesehen davon, dass es sich um den Knoten Element reagieren handelt, keine andere aussagekräftige Darstellung im Dokument. Es sagt nur reagieren , was muss auf dem Bildschirm sein , wenn dieses Element React gerendert wird. Es ist noch nicht "montiert".
Sie können React anweisen, es in einen DOM-Container zu "mounten", indem Sie Folgendes aufrufen:
ReactDOM.render(foo, domContainer);
Dies teilt React mit, dass es Zeit ist, foo
auf der Seite anzuzeigen. React erstellt eine Instanz der FooComponent
Klasse und ruft ihre render
Methode auf. Angenommen, es wird a gerendert <div />
. In diesem Fall erstellt React einen div
DOM-Knoten dafür und fügt ihn in den DOM-Container ein.
Dieser Vorgang des Erstellens von Instanzen und DOM-Knoten, die React-Komponenten entsprechen, und des Einfügens in das DOM wird als Mounten bezeichnet.
Beachten Sie, dass Sie normalerweise nur aufrufen ReactDOM.render()
, um die Stammkomponente (n) bereitzustellen. Sie müssen die untergeordneten Komponenten nicht manuell "mounten". Jedes Mal, wenn eine übergeordnete Komponente aufgerufen setState()
wird und die render
Methode besagt, dass ein bestimmtes untergeordnetes Element zum ersten Mal gerendert werden soll, "meldet" React dieses untergeordnete Element automatisch in das übergeordnete Element.
React.createElement(FooComponent)
keine Instanz von erstellenFooComponent
.foo
ist eine virtuelle DOM-Darstellung, dieFooComponent
auch als React-Element bezeichnet wird. Aber vielleicht haben Sie das mitFooComponent
React-Typ gemeint . Unabhängig davon, dass Sie in React keine Komponenten bereitstellen, rufen Sie render auf, wodurch die Komponente möglicherweise bereitgestellt wird, wenn ein tatsächlicher DOM-Knoten erstellt werden muss, um die Komponente im DOM-Baum darzustellen. Die eigentliche Montage ist das Ereignis, bei dem dies zum ersten Mal geschieht.findDOMNode
auf React-Elementen laufen ).React ist ein isomorphes / universelles Gerüst. Dies bedeutet, dass es eine virtuelle Darstellung des UI-Komponentenbaums gibt, die vom tatsächlichen Rendering, das im Browser ausgegeben wird, getrennt ist. Aus der Dokumentation:
Diese speicherinterne Darstellung ist jedoch nicht direkt mit dem DOM im Browser verknüpft (obwohl sie als virtuelles DOM bezeichnet wird, was ein unglücklicher und verwirrender Name für ein universelles Apps-Framework ist), und es handelt sich lediglich um ein DOM-ähnliches Daten- Struktur, die alle Hierarchien der UI-Komponenten und zusätzliche Metadaten darstellt. Virtual DOM ist nur ein Implementierungsdetail.
Die Schlussfolgerung ist also, dass React agnostisch ist , was bedeutet, dass es ihm egal ist, was die endgültige Ausgabe ist. Es kann sich um einen DOM-Baum im Browser handeln, es kann sich um XML, native Komponenten oder JSON handeln.
Jetzt, da Sie wissen, wie React funktioniert, ist es einfach, Ihre Frage zu beantworten :)
Beim Mounten wird die virtuelle Darstellung einer Komponente in die endgültige Darstellung der Benutzeroberfläche (z. B. DOM oder native Komponenten) ausgegeben.
In einem Browser würde dies bedeuten, dass ein React-Element in ein tatsächliches DOM-Element (z. B. ein HTML- Div oder li- Element) im DOM-Baum ausgegeben wird. In einer nativen Anwendung würde dies bedeuten, dass ein React-Element in eine native Komponente ausgegeben wird. Sie können auch Ihren eigenen Renderer schreiben und React-Komponenten in JSON oder XML oder sogar XAML ausgeben, wenn Sie den Mut dazu haben.
So sind Montage / Demon Handler entscheidend für eine Applikation reagieren, weil Sie nur sicher , dass eine Komponente sein kann , wird Ausgang / gerendert , wenn es angebracht ist . Die
componentDidMount
Handler wird jedoch nur beim Rendern in eine tatsächliche UI-Darstellung (DOM oder native Komponenten) aufgerufen, nicht jedoch, wenn Sie in eine HTML-Zeichenfolge auf dem Server rendernrenderToString
, was sinnvoll ist, da die Komponente erst dann tatsächlich bereitgestellt wird , wenn sie die erreicht Browser und führt darin aus.Und ja, Mounting ist auch ein unglücklicher / verwirrender Name, wenn Sie mich fragen. IMHO
componentDidRender
undcomponentWillRender
wäre viel bessere Namen.quelle
componentDidRender
ein Ersatz ist,componentDidMount
da die Komponente mehrere Male gerendert werden kann, wenn sich die Requisiten ändern, nachdem sie einmal montiert wurden.(id === that.id) ? <Component /> : null
|/app/items/:id
|this.setState(...)
./react-js-the-king-of-universal-apps/
( wobei in den Bearbeitungskommentaren deutlich erwähnt wird, dass es sich um einen defekten Link handelt ), aber die Kollegen haben die Bearbeitung beide Male abgelehnt . Kann mich jemand anleiten, was beim Bearbeiten einer Antwort und Entfernen eines defekten Links falsch ist?Das Mounten bezieht sich auf die Komponente in React (erstellte DOM-Knoten), die an einen Teil des Dokuments angehängt wird. Das ist es!
Wenn Sie React ignorieren, können Sie sich diese beiden nativen Funktionen als Mounting vorstellen:
replaceChild
appendChild
Welches sind wahrscheinlich die häufigsten Funktionen, die React verwendet, um intern zu mounten.
Denk an:
componentWillMount === vor dem Mounten
Und:
componentDidMount === After-Mount
quelle
appendChild
Was ist, wenn die Montage ähnlich istrender
?render
, dass dies die eigentliche Methode ist, mit der die Montage selbst durchgeführt wird. AlsocomponentWillMount
== vor,render
== macht die DOM-Einfügung undcomponentDidMount
== nach dem Mounten (oderrender
hat eine DOM-API aufgerufen, um eine Komponente einzufügen, und dieser asynchrone Vorgang ist vollständig abgeschlossen)https://facebook.github.io/react/docs/tutorial.html
Das Konzept ist, dass Sie ReactJS sagen: "Bitte nehmen Sie dieses Ding, dieses Kommentarfeld oder das sich drehende Bild oder was auch immer ich will, auf die Browserseite und setzen Sie es tatsächlich auf die Browserseite. Wenn das erledigt ist, rufen Sie an meine Funktion, an die ich gebunden bin,
componentDidMount
damit ich fortfahren kann. "componentWillMount
ist das Gegenteil. Es wird sofort ausgelöst, bevor Ihre Komponente gerendert wird.Siehe auch hier https://facebook.github.io/react/docs/component-specs.html
Schließlich scheint der Begriff "mount" für react.js eindeutig zu sein. Ich denke nicht, dass es ein allgemeines Javascript-Konzept oder sogar ein allgemeines Browser-Konzept ist.
quelle
componentDidUpdate
wird stattdessen aufgerufen.Das Mounten bezieht sich auf das anfängliche Laden der Seite, wenn Ihre React-Komponente zum ersten Mal gerendert wird. Aus der React-Dokumentation für die Montage: componentDidMount:
Invoked once, only on the client (not on the server), immediately after the initial rendering occurs. At this point in the lifecycle, the component has a DOM representation which you can access via React.findDOMNode(this).
Sie können dies mit der Funktion componentDidUpdate vergleichen, die jedes Mal aufgerufen wird, wenn React rendert (mit Ausnahme des ersten Mount).
quelle
Das Hauptziel von React js ist die Erstellung wiederverwendbarer Komponenten. Komponenten sind hier die einzelnen Teile einer Webseite. In einer Webseite ist beispielsweise die Kopfzeile eine Komponente, die Fußzeile eine Komponente, eine Toastbenachrichtigung eine Komponente usw. Der Begriff "mount" gibt an, dass diese Komponenten in das DOM geladen oder gerendert werden. Dies sind viele Top-Level-APIs und Methoden, die sich damit befassen.
Zur Vereinfachung bedeutet "montiert", dass die Komponente in das DOM geladen wurde, und "nicht gemountet" bedeutet, dass die Komponenten aus dem DOM entfernt wurden.
quelle