Maison > Article > interface Web > Analyse de l'algorithme Diff : analyse du processus de rendu à l'aide de React
Ce que cet article vous apporte, c'est l'analyse de l'algorithme Diff : analyse du processus de rendu à l'aide de React, qui a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer, j'espère qu'il vous sera utile.
Dans React, le résultat de l'exécution du rendu n'est pas un véritable nœud DOM. Le résultat est juste un objet JavaScript léger, que nous appelons virtuel.
Pour faire simple, le DOM dit virtuel est en fait le mappage d'objets JavaScript avec des nœuds DOM HTML, c'est-à-dire l'utilisation d'objets JavaScript pour exprimer la structure HTML, et cet objet ; est le DOM virtuel.
Html :
Représentation d'objet JavaScript (DOM virtuel)
{ tagName: 'ul', props: { id: 'list' }, children: [ {tagName: 'li', props: {class: 'item'}, children: ["Item 1"]}, {tagName: 'li', props: {class: 'item'}, children: ["Item 2"]}, ] }
Le cycle de vie de React comporte trois étapes : le chargement, la mise à jour et la désinstallation. Vous trouverez ci-joint un diagramme du cycle de vie de React ;
Comme mentionné précédemment : le résultat de l'exécution du rendu n'est pas le véritable nœud DOM. le résultat est juste un objet JavaScript léger, c'est-à-dire qu'un DOM virtuel sera créé lorsque la fonction de rendu est appelée
class Tab extends React.Component { render() { React.createElement( 'p', { className: 'class'}, 'Hello React' ) } }
function createElement(type, config, children) { let propName; const props = {}; let key = null; let ref = null; let self = null; let source = null; if (config != null) { if (hasValidRef(config)) { // 如果有ref,将它取出来 ref = config.ref; } if (hasValidKey(config)) { // 如果有key,将它取出来 key = '' + config.key; } self = config.__self === undefined ? null : config.__self; source = config.__source === undefined ? null : config.__source; for (propName in config) { if ( hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName) ) { // 将除ref,key等这些特殊的属性放到新的props对象里 props[propName] = config[propName]; } } } // 获取子元素 const childrenLength = arguments.length - 2; if (childrenLength === 1) { props.children = children; } else if (childrenLength > 1) { const childArray = Array(childrenLength); for (let i = 0; i
4. Pourquoi est-ce nécessaire Utiliser le DOM virtuel
Mais la liaison de données bidirectionnelle MVVM n'est pas le seul moyen. Il existe également une méthode très intuitive : une fois l'état modifié, utilisez le moteur de modèle pour restituer la vue entière, puis remplacez la vue. ancienne vue avec la nouvelle vue.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!