Odpowiedzi:
Głównym zadaniem Reacta jest wymyślenie, jak zmodyfikować DOM, aby dopasować komponenty, które mają być renderowane na ekranie.
React robi to przez "montowanie" (dodawanie węzłów do DOM), "odmontowywanie" (usuwanie ich z DOM) i "aktualizowanie" (wprowadzanie zmian do węzłów już w DOM).
To, jak węzeł React jest reprezentowany jako węzeł DOM oraz gdzie i kiedy pojawia się w drzewie DOM, jest zarządzane przez API najwyższego poziomu . Aby lepiej zrozumieć, co się dzieje, spójrz na najprostszy możliwy przykład:
// JSX version: let foo = <FooComponent />;
let foo = React.createElement(FooComponent);
Więc co to jest foo
i co możesz z tym zrobić? foo
w tej chwili jest zwykłym obiektem JavaScript, który wygląda mniej więcej tak (uproszczony):
{
type: FooComponent,
props: {}
}
Obecnie nie ma go nigdzie na stronie, tj. Nie jest elementem DOM, nie istnieje nigdzie w drzewie DOM i poza tym, że jest węzłem elementu React, nie ma innej znaczącej reprezentacji w dokumencie. Po prostu mówi Reactowi, co musi być na ekranie, jeśli ten element React zostanie renderowany. Nie jest jeszcze „zamontowany”.
Możesz nakazać Reactowi „zamontowanie” go w kontenerze DOM, wywołując:
ReactDOM.render(foo, domContainer);
To mówi Reactowi, że czas pokazać foo
się na stronie. React utworzy instancję FooComponent
klasy i wywoła jej render
metodę. Powiedzmy, że renderuje a <div />
, w takim przypadku React utworzy div
dla niego węzeł DOM i wstawi go do kontenera DOM.
Ten proces tworzenia instancji i węzłów DOM odpowiadających komponentom React i wstawiania ich do DOM nazywa się montowaniem.
Zauważ, że normalnie wywołujesz tylko w ReactDOM.render()
celu zamontowania komponentów root. Nie ma potrzeby ręcznego „montowania” komponentów podrzędnych. Za każdym razem, gdy wywoływany jest komponent nadrzędny setState()
, a jego render
metoda mówi, że określone dziecko powinno zostać wyrenderowane po raz pierwszy, React automatycznie „zamontuje” to dziecko w jego rodzicu.
findDOMNode
na elementach React).
React to izomorficzna / uniwersalna struktura. Oznacza to, że istnieje wirtualna reprezentacja drzewa składników interfejsu użytkownika, która jest niezależna od rzeczywistego renderowania, które generuje w przeglądarce. Z dokumentacji:
React jest tak szybki, ponieważ nigdy nie komunikuje się bezpośrednio z DOM. React utrzymuje szybką reprezentację modelu DOM w pamięci.
Jednak ta reprezentacja w pamięci nie jest bezpośrednio powiązana z DOM w przeglądarce (mimo że nazywa się Virtual DOM, co jest niefortunną i mylącą nazwą dla uniwersalnej struktury aplikacji), a jest to po prostu dane przypominające DOM struktura, która reprezentuje wszystkie hierarchie składników interfejsu użytkownika i dodatkowe metadane. Wirtualny DOM to tylko szczegół implementacji.
„Uważamy, że prawdziwymi fundamentami Reacta są po prostu pomysły komponentów i elementów: możliwość opisania tego, co chcesz renderować w sposób deklaratywny. Są to elementy wspólne dla wszystkich tych różnych pakietów. Części Reacta specyficzne dla określonego renderowania cele zwykle nie są tym, o czym myślimy, gdy myślimy o Reakcie ”. - Blog React js
Zatem wniosek jest taki, że React jest agnostykiem renderowania , co oznacza, że nie dba o to, jaki będzie wynik końcowy. Może to być drzewo DOM w przeglądarce, może to być XML, komponenty natywne lub JSON.
„Kiedy patrzymy na takie pakiety, jak responsywność, reakcja sztuki, reagowanie na płótno i reagowanie na trzy, staje się jasne, że piękno i istota Reacta nie ma nic wspólnego z przeglądarkami ani DOM”. - Blog React js
Skoro już wiesz, jak działa React, łatwo odpowiedzieć na Twoje pytanie :)
Montowanie to proces wyprowadzania wirtualnej reprezentacji komponentu do ostatecznej reprezentacji UI (np. DOM lub Komponenty natywne).
W przeglądarce oznaczałoby to umieszczenie elementu React w rzeczywistym elemencie DOM (np. HTML div lub li ) w drzewie DOM. W aplikacji natywnej oznaczałoby to wyprowadzenie elementu React do komponentu natywnego. Możesz także napisać własny renderer i wyprowadzić komponenty React w JSON lub XML, a nawet XAML, jeśli masz odwagę.
Tak więc, moduły obsługi montowania / odmontowywania są krytyczne dla aplikacji React, ponieważ możesz mieć pewność, że komponent zostanie wyprowadzony / wyrenderowany po zamontowaniu . JednakżecomponentDidMount
moduł obsługi jest wywoływany tylko podczas renderowania do rzeczywistej reprezentacji interfejsu użytkownika (DOM lub Native Components), ale nie w przypadku renderowania do ciągu HTML na serwerze przy użyciu renderToString
, co ma sens, ponieważ komponent nie jest faktycznie montowany, dopóki nie osiągnie przeglądarka i uruchamia się w niej.
I tak, montaż to również niefortunna / myląca nazwa, jeśli o mnie chodzi. IMHO componentDidRender
i componentWillRender
byłoby znacznie lepszymi nazwami.
componentDidRender
aby zastępował, componentDidMount
ponieważ komponent może renderować się wiele razy, gdy rekwizyty zmieniają się po jednokrotnym zamontowaniu.
(id === that.id) ? <Component /> : null
| /app/items/:id
| this.setState(...)
.
/react-js-the-king-of-universal-apps/
( z komentarzami edycji wyraźnie wskazującymi, że jest to uszkodzony link ), ale koledzy odrzucili edycję za każdym razem . Czy ktoś może mi pomóc, co jest nie tak w edytowaniu odpowiedzi i usuwaniu uszkodzonego łącza?
Montowanie odnosi się do komponentu w React (utworzone węzły DOM) dołączanego do jakiejś części dokumentu. Otóż to!
Ignorując Reacta możesz myśleć o tych dwóch natywnych funkcjach jako o montowaniu:
Które są prawdopodobnie najbardziej powszechnymi funkcjami używanymi przez React do montowania wewnętrznego.
Myśleć o:
componentWillMount === przed zamontowaniem
I:
componentDidMount === po zamontowaniu
appendChild
, to co to jest render
?
render
jest to właściwa metoda, która sama zrobi montaż. Tak więc componentWillMount
== przed, render
== wstawia DOM i componentDidMount
== po zamontowaniu (lub render
wywołał interfejs API DOM w celu wstawienia komponentu i operacja asynchroniczna została w pełni zakończona)
https://facebook.github.io/react/docs/tutorial.html
Tutaj componentDidMount jest metodą wywoływaną automatycznie przez Reacta, gdy komponent jest renderowany.
Chodzi o to, że mówisz ReactJS: „weź to, proszę, to pole komentarza, obracający się obrazek, czy cokolwiek chcę na stronie przeglądarki, i umieść to na stronie przeglądarki. Kiedy to zrobisz, zadzwoń moja funkcja, do której się zobowiązałem, componentDidMount
więc mogę kontynuować ”.
componentWillMount
jest odwrotnie. Zapali się natychmiast PRZED renderowaniem komponentu.
Zobacz także tutaj https://facebook.github.io/react/docs/component-specs.html
Wreszcie, termin „montowanie” wydaje się być unikatowy w przypadku respond.js. Nie sądzę, że jest to ogólna koncepcja javascript, czy nawet ogólna koncepcja przeglądarki.
componentDidUpdate
jest wywoływana zamiast.
Montowanie odnosi się do początkowego wczytywania strony, kiedy komponent React jest po raz pierwszy renderowany. Z dokumentacji React do montażu: 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).
Możesz to porównać z funkcją componentDidUpdate, która jest wywoływana za każdym razem, gdy React renderuje (z wyjątkiem początkowego montowania).
Głównym celem React js jest tworzenie komponentów wielokrotnego użytku. W tym przypadku komponenty to poszczególne części strony internetowej. Na przykład na stronie internetowej nagłówek jest komponentem, stopka jest komponentem, wyskakujące powiadomienie jest komponentem itd. Termin „mount” mówi nam, że te komponenty są ładowane lub renderowane w DOM. Oto wiele API i metod najwyższego poziomu, które sobie z tym radzą.
Upraszczając, zamontowanie oznacza, że komponent został załadowany do DOM, a odmontowany oznacza, że komponenty zostały usunięte z DOM.
React.createElement(FooComponent)
, nie tworzysz instancjiFooComponent
.foo
jest wirtualną reprezentacją DOMFooComponent
znaną również jako element React. Ale może to właśnie miałeś na myśli przezFooComponent
typ React . Niezależnie od tego, nie montujesz komponentów w React, wywołujesz render, który z kolei może zamontować komponent, jeśli trzeba utworzyć rzeczywisty węzeł DOM, aby reprezentował komponent w drzewie DOM. Rzeczywisty montaż jest zdarzeniem, w którym dzieje się to po raz pierwszy.