简体   繁体   中英

How Virtual DOM works in React or Vue

I ma student and I m trying to create own Virtual DOM for my college project ( It will not have any advanced feature like props or events, I will keep it simple ) in JavaScript like other famous frameworks React, Vue and other.

I just want to know that when we have multiple file of code( code splitting ). If I make a change in any deep child than do I need to compare complete virtual DOM (including all child and parent element) or I just need to compare only that child elements.

If I have to compare complete new virtual DOM ( including all children ) with previous Virtual DOM. Then Why should I care re-rendering in React or Vue ( because any changes in child will force the framework to compare complete Virtual DOM )

Answer to your last point as I infer from my experience of React is that comparing Virtual DOM's in Javascript is the thing that helps react know what things it has to re-render on the actual DOM, So the "re-rendering" is the hard part on which the performance of the APP takes the hit. Hopefully, this would help.

For Vue, The working of virtual DOM differs in vue2 and vue3.

The way vue3 does it, is,

  1. By parsing the HTML template or render function from the component files and converting it to a Virtual Node representation.
  2. While doing the parsing, it records the nodes that have a dependency on dynamic data.
  3. Something like below
dynamicData = { data1: [ effect1, effect2, ... ], data2: [ effect4, effect5, ... ], ... }
  1. Effects are functions that define computations required to resolve certain data values.
  2. Effects also include render function for the Virtual nodes
  3. Render functions smartly converts virtual nodes to DOM elements
  4. Now whenever data1 changes Vue3 re-executes the corresponding effects and triggers update for subsequent data changes.

References:

  1. Vue3 Reactivity
  2. Vnode Transformation

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM