Le travail principal de React est de comprendre comment modifier le DOM pour qu'il corresponde à ce que les composants veulent être rendus à l'écran.
React le fait en «montant» (en ajoutant des nœuds au DOM), en «démontant» (en les supprimant du DOM) et en «mettant à jour» (en apportant des modifications aux nœuds déjà dans le DOM).
Comment un nœud React est représenté en tant que nœud DOM et où et quand il apparaît dans l'arborescence DOM est géré par l' API de niveau supérieur . Pour avoir une meilleure idée de ce qui se passe, regardez l'exemple le plus simple possible:
// JSX version: let foo = <FooComponent />;
let foo = React.createElement(FooComponent);
Alors qu'est-ce que c'est foo
et que pouvez-vous en faire? foo
, pour le moment, est un objet JavaScript simple qui ressemble à peu près à ceci (simplifié):
{
type: FooComponent,
props: {}
}
Il n'est actuellement nulle part sur la page, c'est-à-dire que ce n'est pas un élément DOM, n'existe nulle part dans l'arborescence DOM et, mis à part le nœud d'élément React, n'a pas d'autre représentation significative dans le document. Il indique simplement à React ce qui doit être à l'écran si cet élément React est rendu. Il n'est pas encore "monté".
Vous pouvez dire à React de le «monter» dans un conteneur DOM en appelant:
ReactDOM.render(foo, domContainer);
Cela indique à React qu'il est temps d'afficher foo
sur la page. React créera une instance de la FooComponent
classe et appellera sa render
méthode. Disons qu'il rend un <div />
, dans ce cas, React créera un div
nœud DOM pour lui et l'insérera dans le conteneur DOM.
Ce processus de création d'instances et de nœuds DOM correspondant aux composants React, et de leur insertion dans le DOM, est appelé montage.
Notez que normalement, vous n'appelez que ReactDOM.render()
pour monter le (s) composant (s) racine. Vous n'avez pas besoin de «monter» manuellement les composants enfants. Chaque fois qu'un composant parent appelle setState()
et que sa render
méthode indique qu'un enfant particulier doit être rendu pour la première fois, React "montera" automatiquement cet enfant dans son parent.
React.createElement(FooComponent)
vous ne créez pas une instance deFooComponent
.foo
est une représentation DOM virtuelleFooComponent
également connue sous le nom d'élément React. Mais c'est peut-être ce que vous entendez parFooComponent
type React . Quoi qu'il en soit, vous ne montez pas de composants dans React, vous appelez render qui à son tour peut monter le composant si un nœud DOM réel doit être créé pour représenter le composant dans l'arborescence DOM. Le montage réel est l'événement au cours duquel cela se produit pour la première fois.findDOMNode
sur des éléments React).React est un framework isomorphe / universel . Cela signifie qu'il existe une représentation virtuelle de l'arborescence des composants de l'interface utilisateur, qui est distincte du rendu réel qu'elle génère dans le navigateur. De la documentation:
Cependant, cette représentation en mémoire n'est pas directement liée au DOM dans le navigateur (même si elle s'appelle Virtual DOM, qui est un nom malheureux et déroutant pour un cadre d'applications universelles), et il ne s'agit que de données de type DOM. structure qui représente toute la hiérarchie des composants de l'interface utilisateur et des métadonnées supplémentaires. Virtual DOM n'est qu'un détail d'implémentation.
Donc, la conclusion est que React est indépendant du rendu , ce qui signifie qu'il ne se soucie pas de la sortie finale. Cela peut être une arborescence DOM dans le navigateur, cela peut être du XML, des composants natifs ou JSON.
Maintenant que vous savez comment fonctionne React, il est facile de répondre à votre question :)
Le montage est le processus de sortie de la représentation virtuelle d'un composant dans la représentation finale de l'interface utilisateur (par exemple DOM ou composants natifs).
Dans un navigateur, cela signifierait la sortie d'un élément React dans un élément DOM réel (par exemple un élément HTML div ou li ) dans l'arborescence DOM. Dans une application native, cela signifierait la sortie d'un élément React dans un composant natif. Vous pouvez également écrire votre propre moteur de rendu et générer des composants React en JSON ou XML ou même XAML si vous en avez le courage.
Ainsi, les gestionnaires de montage / démontage sont essentiels pour une application React, car vous ne pouvez être sûr qu'un composant est sorti / rendu lorsqu'il est monté . Cependant, le
componentDidMount
gestionnaire n'est appelé que lors du rendu vers une représentation réelle de l'interface utilisateur (DOM ou composants natifs) mais pas si vous effectuez le rendu vers une chaîne HTML sur le serveur en utilisantrenderToString
, ce qui est logique, car le composant n'est pas réellement monté tant qu'il n'a pas atteint le navigateur et s'exécute dedans.Et, oui, Montage est aussi un nom malheureux / déroutant, si vous me le demandez. IMHO
componentDidRender
etcomponentWillRender
serait de bien meilleurs noms.la source
componentDidRender
soit un substitut,componentDidMount
car le composant peut effectuer plusieurs rendus lorsque les accessoires changent après avoir été montés une fois.(id === that.id) ? <Component /> : null
|/app/items/:id
|this.setState(...)
./react-js-the-king-of-universal-apps/
( avec les commentaires d'édition mentionnant clairement qu'il s'agit d'un lien cassé ), mais les pairs ont rejeté la modification les deux fois . Quelqu'un peut-il m'indiquer ce qui ne va pas dans la modification d'une réponse et la suppression d'un lien rompu?Le montage fait référence au composant dans React (nœuds DOM créés) attaché à une partie du document. C'est tout!
En ignorant React, vous pouvez considérer ces deux fonctions natives comme un montage:
remplacerEnfant
appendChild
Quelles sont probablement les fonctions les plus courantes utilisées par React pour monter en interne.
Penser à:
componentWillMount === avant le montage
Et:
componentDidMount === après le montage
la source
appendChild
, qu'est-ce que c'estrender
?render
c'est la méthode réelle qui fera le montage lui-même. DonccomponentWillMount
== avant,render
== fait l'insertion DOM etcomponentDidMount
== après le montage (ourender
a appelé une API DOM pour insérer un composant et cette opération asynchrone est complètement terminée)https://facebook.github.io/react/docs/tutorial.html
Le concept est que vous dites à ReactJS, "veuillez prendre ce truc, cette zone de commentaire ou cette image tournante ou tout ce que je veux sur la page du navigateur, et allez-y et placez-le sur la page du navigateur. Lorsque cela est fait, appelez ma fonction à laquelle je me suis lié pour
componentDidMount
pouvoir continuer. "componentWillMount
est le contraire. Il se déclenchera immédiatement AVANT le rendu de votre composant.Voir aussi ici https://facebook.github.io/react/docs/component-specs.html
Enfin, le terme "mount" semble être unique à react.js. Je ne pense pas que ce soit un concept javascript général, ni même un concept de navigateur général.
la source
componentDidUpdate
est appelé à la place.Le montage fait référence au chargement initial de la page lors du premier rendu de votre composant React. Depuis la documentation React pour le 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).
Vous pouvez comparer cela avec la fonction componentDidUpdate, qui est appelée à chaque fois que React rend (à l'exception du montage initial).
la source
L'objectif principal de React js est de créer des composants réutilisables. Ici, les composants sont les différentes parties d'une page Web. Par exemple, dans une page Web, l'en-tête est un composant, le pied de page est un composant, une notification toast est un composant, etc. Le terme «montage» nous indique que ces composants sont chargés ou rendus dans le DOM. Ce sont de nombreuses API et méthodes de premier niveau traitant de cela.
Pour simplifier les choses, monté signifie que le composant a été chargé dans le DOM et démonté signifie que les composants ont été supprimés du DOM.
la source