美文网首页
virtual DOM and life circle of V

virtual DOM and life circle of V

作者: meteornnnight | 来源:发表于2019-08-09 15:27 被阅读0次

1. virtual DOM

一个真正的dom节点可以在js中映射成一个这样的对象,也就是js中的虚拟dom。

const node={
  tag: 'ul',
  attributes: {
    id: 'list1',
    class: ['classname1', classname2'],
    ...
    },
  chirldren: [child1, child2, child3,...]
}

我们在创建一个vue实例之后,它会先被render function渲染成虚拟dom,然后再mount到真正dom上。

1.1 .el

vue实例的el可以是一个string字符串或者是一个HTMLElement.

1.2 virtual dom -- diff

function patch (oldVnode, Vnode){
if (sameVnode(oldVnode,Vnode) {
   patchVnode(oldVnode, Vnode)
  } else {
        const oEl = oldVnode.el
        let parentEle = api.parentNode(oEl)
        createEle(vnode)
        if (parentEle !== null) {
            api.insertBefore(parentEle, vnode.el, api.nextSibling(oEl))
            api.removeChild(parentEle, oldVnode.el)
            oldVnode = null
        }
  }
}

sameVnode的函数返回结果如果为true,表示dom元素可以复用;如果为false,则会生成新的dom元素,替换原来的dom元素。在dom元素可以复用的情况下,会进入patchVnode函数:

patchVnode (oldVnode, vnode) {
    const el = vnode.el = oldVnode.el
    let i, oldCh = oldVnode.children, ch = vnode.children
    if (oldVnode === vnode) return
    if (oldVnode.text !== null && vnode.text !== null && oldVnode.text !== vnode.text) {
        api.setTextContent(el, vnode.text)
    }else {
        updateEle(el, vnode, oldVnode)
        if (oldCh && ch && oldCh !== ch) {
            updateChildren(el, oldCh, ch)
        }else if (ch){
            createEle(vnode) //create el's children dom
        }else if (oldCh){
            api.removeChildren(el)
        }
    }
}

updateEle,更新孩子节点是diff算法中最核心的部分。
下图中,菱形表示Vnode对象,圆形表示真实dom元素。下图中可以看到,当新旧children数目相同的时候,只需要patch即可。

新旧children的patch
未完待续……
8个生命周期函数
Reference
http://hcysun.me/vue-design/zh/renderer-diff.html

相关文章

  • virtual DOM and life circle of V

    1. virtual DOM 一个真正的dom节点可以在js中映射成一个这样的对象,也就是js中的虚拟dom。 我...

  • Vue原理学习(四)

    实现Virtual DOM 的VNode节点 在这里,我们首先要区分Virtual DOM 和VNode的意思,V...

  • 关于React Virtual DOM

    React本身只是一个DOM的抽象层,使⽤组件构建虚拟DOM 首先来看,什么是Virtual DOM 简单来说,V...

  • virtual DOM 实现原理

    virtual DOM 实现: virtual-dom Snabbdom 对比 数据结构virtual Node ...

  • 实现简单render函数

    什么是Virtual Dom React和Vue2都使用了Virtual Dom技术,Virtual Dom并不是...

  • Day7:virtual dom & MVVM

    virtual dom 什么是virtual dom 虚拟dom 用JS模拟DOM结构 DOM变化的对比,放在JS...

  • Virtual DOM

    什么是 Virtual DOM Virtual DOM(虚拟 DOM),是由普通的 JS 对象来描述 DOM 对象...

  • Javascript 简要,你一定要看看

    1.Virtual DOM Vue 和 React 都使用了 Virtual DOM,那么什么是 Virtual ...

  • 虚拟DOM

    虚拟DOM 基础概念: virtual DOM是对真实DOM的描述和映射 当Virtual DOM改变后,我们得到...

  • 虚拟DOM

    Virtual DOM Virtual DOM,是由普通的JS对象来描述DOM对象,因为不是真实的DOM对象,所以...

网友评论

      本文标题:virtual DOM and life circle of V

      本文链接:https://www.haomeiwen.com/subject/nrthjctx.html