Was ist „Mounten“ in React js?

Lesezeit: 8 Minuten

Benutzer-Avatar
Tore

Ich höre den Begriff “Mount” zu oft, während ich ReactJS lerne. Und es scheint Lebenszyklusmethoden und Fehler in Bezug auf diesen Begriff zu geben. Was genau bedeutet React mit Mounten?

Beispiele: componentDidMount() and componentWillMount()

Benutzer-Avatar
Filip Dupanovic

Die Hauptaufgabe von React besteht darin, herauszufinden, wie das DOM geändert werden kann, damit es mit dem übereinstimmt, was die Komponenten auf dem Bildschirm darstellen möchten.

React tut dies durch „Mounten“ (Hinzufügen von Knoten zum DOM), „Unmounten“ (Entfernen von Knoten aus dem DOM) und „Aktualisieren“ (Vornehmen von Änderungen an Knoten, die sich bereits im DOM befinden).

Wie ein React-Knoten als DOM-Knoten dargestellt wird und wo und wann er im DOM-Baum erscheint, wird vom verwaltet API der obersten Ebene. Um eine bessere Vorstellung davon zu bekommen, was vor sich geht, sehen Sie sich das möglichst einfache Beispiel an:

// JSX version: let foo = <FooComponent />;
let foo = React.createElement(FooComponent);

Also was ist foo und was kann man damit machen? fooist im Moment 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 einen React-Elementknoten handelt, keine andere sinnvolle Darstellung im Dokument. Es sagt React einfach was braucht auf dem Bildschirm sein wenn Dieses React-Element wird gerendert. 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 sagt React, dass es Zeit ist, es zu zeigen foo auf der Seite. React erstellt eine Instanz der FooComponent Klasse und nennen Sie es render Methode. Sagen wir, es macht a <div />in diesem Fall erstellt React eine div DOM-Knoten dafür und fügen Sie ihn in den DOM-Container ein.

Dieser Prozess des Erstellens von Instanzen und DOM-Knoten, die React-Komponenten entsprechen, und des Einfügens in das DOM wird Mounten genannt.

Beachten Sie, dass Sie normalerweise nur anrufen würden ReactDOM.render() um die Root-Komponente(n) zu mounten. Sie müssen die untergeordneten Komponenten nicht manuell „mounten“. Jedes Mal, wenn eine übergeordnete Komponente aufruft setState()und sein render -Methode sagt, dass ein bestimmtes Kind zum ersten Mal gerendert werden soll, wird React dieses Kind automatisch in sein Elternteil “mounten”.

  • Darauf möchte ich bei Ihrem Anruf hinweisen React.createElement(FooComponent) Sie erstellen keine Instanz von FooComponent. foo ist eine virtuelle DOM-Darstellung von FooComponent auch bekannt als React-Element. Aber vielleicht hast du das gemeint FooComponent Reaktionstyp. Unabhängig davon mounten Sie keine Komponenten in React, sondern rufen render auf, was wiederum könnte Mounten Sie die Komponente, wenn ein tatsächlicher DOM-Knoten erstellt werden muss, um die Komponente in der DOM-Struktur darzustellen. Die eigentliche Montage ist das Ereignis, bei dem dies zum ersten Mal geschieht.

    – John Leidgren

    21. März 2017 um 5:54 Uhr


  • Das Mounten bezieht sich auf das Anhängen der React-Komponenteninstanz an den DOM-Knoten, was notwendig ist, um Baumunterschiede/inkrementelle Renderaktualisierungen bei nachfolgenden Renderaufrufen durchzuführen.

    – John Leidgren

    21. März 2017 um 5:58 Uhr


  • Ich habe mir erlaubt, diese Antwort zu bearbeiten, da sie bereits akzeptiert wurde, aber einige Missverständnisse darin waren (z. B. Sie können nicht rennen findDOMNode auf Reaktionselementen).

    – Dan Abramow

    10. Juni 2018 um 14:17 Uhr


  • Das Unmounten von @Rahamin erfolgt, wenn die Komponente entfernt / ersetzt wird. Wenn Sie so zwischen Szenen navigieren, dass kein Rendern erfolgt, wird Ihnen kein Unmount-Signal garantiert. „componentWillUnmount“ ist nicht dasselbe wie das Entladen von Seiten.

    – John Leidgren

    5. Juli 2018 um 12:32 Uhr

  • @Yossi hier ist ein Beispiel für explizites Mounten und unMounten einer Komponente in einer Testsuite: stackoverflow.com/a/55359234/6225838

    – CPHPython

    26. März 2019 um 15:03 Uhr

Benutzer-Avatar
Faris Zacina

Reagieren ist ein isomorph/universal Rahmen. Das bedeutet, dass es eine virtuelle Darstellung des UI-Komponentenbaums gibt, die von der eigentlichen Darstellung, die sie im Browser ausgibt, getrennt ist. Aus der Dokumentation:

React ist so schnell, weil es nie direkt mit dem DOM spricht. React behält eine schnelle In-Memory-Darstellung des DOM bei.

Diese In-Memory-Darstellung ist jedoch nicht direkt an das DOM im Browser gebunden (auch wenn es als Virtual DOM bezeichnet wird, Das ist ein unglücklicher und verwirrender Name für ein universelles Apps-Framework), und es ist nur eine DOM-ähnliche Datenstruktur, die die gesamte Hierarchie der UI-Komponenten und zusätzliche Metadaten darstellt. Virtual DOM ist nur ein Implementierungsdetail.

„Wir denken, dass die wahren Grundlagen von React einfach Ideen von Komponenten und Elementen sind: in der Lage zu sein, auf deklarative Weise zu beschreiben, was Sie rendern möchten. Dies sind die Teile, die all diese verschiedenen Pakete gemeinsam haben. Die Teile von React, die für bestimmtes Rendering spezifisch sind Ziele sind normalerweise nicht das, woran wir denken, wenn wir an React denken.” – Reagieren Sie js Blog

Das Fazit ist also React ist Rendering-agnostisch, was bedeutet, dass es sich nicht um die endgültige Ausgabe kümmert. Es kann ein DOM-Baum im Browser sein, es kann XML, native Komponenten oder JSON sein.

„Wenn wir uns Pakete wie „react-native“, „react-art“, „react-canvas“ und „react-three“ ansehen, wird deutlich, dass die Schönheit und Essenz von React nichts mit Browsern oder dem DOM zu tun hat.“ – Reagieren Sie js Blog

Jetzt, da Sie wissen, wie React funktioniert, ist es einfach, Ihre Frage zu beantworten 🙂

Montage ist der Prozess der Ausgabe der virtuellen Darstellung einer Komponente in die endgültige UI-Darstellung (z. B. DOM oder native Komponenten).

In einem Browser würde das bedeuten, ein React-Element in ein tatsächliches DOM-Element (z. B. ein HTML div oder li -Element) im DOM-Baum. In einer nativen Anwendung würde das bedeuten, ein React-Element in eine native Komponente auszugeben. Sie können auch Ihren eigenen Renderer schreiben und React-Komponenten in JSON oder XML oder sogar XAML ausgeben, wenn Sie den Mut haben.

Daher sind Mount-/Unmount-Handler für eine React-Anwendung von entscheidender Bedeutung, da Sie nur dann sicher sein können, dass eine Komponente ausgegeben/gerendert wird, wenn dies der Fall ist montiert. Allerdings ist die componentDidMount -Handler wird nur aufgerufen, wenn eine tatsächliche UI-Darstellung (DOM oder native Komponenten) gerendert wird, aber nicht, wenn Sie auf dem Server eine HTML-Zeichenfolge rendern renderToStringwas sinnvoll ist, da die Komponente erst tatsächlich gemountet wird, wenn sie den Browser erreicht und darin ausgeführt wird.

Und ja, Montage ist auch ein unglücklicher/verwirrender Name, wenn Sie mich fragen. meiner bescheidenen Meinung nach componentDidRender und componentWillRender wären viel bessere Namen.

  • Jemand hat mich gerade auf diese Antwort aus einem anderen Forum hingewiesen. Ich denke nicht componentDidRender ist ein Ersatz für componentDidMount da die Komponente mehrmals gerendert werden kann, wenn sich Requisiten ändern, nachdem sie einmal gemountet wurde.

    – Gaurav

    2. Januar 2016 um 9:46 Uhr

  • @TheMinister Es wurde als “virtuelle DOM” -Bibliothek bezeichnet, weil es nicht als isomorph begann, sondern von Anfang an an das DOM gebunden war. Es war ein nachträglicher Einfall, es isomorph zu machen.

    – Claudi

    22. Januar 2016 um 23:30 Uhr

  • So, montieren ist austauschbar mit machen? In diesem Fall ist es wahr, dass eine Komponente ist montiert/gerendert für jede der folgenden Hypothesen?: (id === that.id) ? <Component /> : null | /app/items/:id | this.setState(...).

    – Codi

    2. Juni 2016 um 17:04 Uhr

  • Der Link zu /react-js-the-king-of-universal-apps/ ist defekt

    – Michael Freigeim

    23. Mai 2019 um 21:56 Uhr

  • Ich habe den Beitrag zweimal bearbeitet, um den fehlerhaften Link zu entfernen /react-js-the-king-of-universal-apps/ (wobei die Bearbeitungskommentare deutlich erwähnen, dass es sich um einen defekten Link handelt), aber Die Kollegen haben die Bearbeitung beide Male abgelehnt. Kann mir jemand sagen, was beim Bearbeiten einer Antwort und beim Entfernen eines defekten Links falsch ist?

    – Aaditya Sharma

    21. August 2019 um 11:44 Uhr

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 Mounten vorstellen:

Kind ersetzen

Kind anhängen

Dies sind wahrscheinlich die häufigsten Funktionen, die React zum internen Mounten verwendet.

Denk an:

componentWillMount === before-mount

Und:

componentDidMount === after-mount

  • Wenn die Montage ähnlich ist appendChildwas ist render ?

    – Deke

    30. April 2018 um 0:49 Uhr

  • Ich denke, man könnte sagen render ist die eigentliche Methode, die die Montage selbst durchführt. So componentWillMount == vorher, render == führt die DOM-Einfügung aus, und componentDidMount == nach dem mounten (bzw render eine DOM-API zum Einfügen einer Komponente aufgerufen hat und dieser asynchrone Vorgang vollständig abgeschlossen ist)

    – Rauben

    27. Juli 2019 um 15:12 Uhr

https://facebook.github.io/react/docs/tutorial.html

Hier ist componentDidMount eine Methode, die automatisch von React aufgerufen wird, wenn eine Komponente gerendert wird.

Das Konzept ist, dass Sie ReactJS sagen: „Bitte nehmen Sie dieses Ding, dieses Kommentarfeld oder sich drehende Bild oder was auch immer ich auf der Browserseite haben möchte, und legen Sie es tatsächlich auf der Browserseite ab. Wenn das erledigt ist, rufen Sie an meine Funktion, an die ich gebunden bin componentDidMount damit ich weitermachen 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 einzigartig zu sein. Ich glaube nicht, dass es sich um ein allgemeines Javascript-Konzept oder sogar um ein allgemeines Browser-Konzept handelt.

Benutzer-Avatar
Mark Brownsword

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 anfänglichen Mounts).

Benutzer-Avatar
Pranesh Ravi

Das Hauptziel von React js ist es, wiederverwendbare Komponenten zu erstellen. Komponenten sind hier die einzelnen Teile einer Webseite. Auf einer Webseite ist beispielsweise die Kopfzeile eine Komponente, die Fußzeile eine Komponente, eine Toastbenachrichtigung eine Komponente usw. Der Begriff „Mount“ sagt uns, dass diese Komponenten im DOM geladen oder gerendert werden. Dies sind viele APIs und Methoden der obersten Ebene, die sich damit befassen.

Um es einfach zu machen: Eingehängt bedeutet, dass die Komponente in das DOM geladen wurde, und nicht eingehängt bedeutet, dass die Komponente aus dem DOM entfernt wurde.

1282310cookie-checkWas ist „Mounten“ in React js?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy