虚拟dom第一次创建为真实dom及更新dom

1、第一次创建dom(patch方法)大致流程:

function patch(vnode) {
  let tag = vnode.tag; //目标元素
  let attrs = vnode.attrs || {}; //属性
  let children = vnode.children || []; //子节点

  if (!tag) {
    return null;
  }

  // 1.创建对应的节点
  let elem = document.createElement(tag);
  let attrName;
  // 2.给dom添加属性
  for (attrName in attrs) {
    if (attrs.hasOwnProperty(attrName)) {
      elem.setAttribute(attrName, attrs[attrName]); //class style……
    }
  }
  // 3.将子元素添加到目标元素上
  children.forEach(function (childVnode) {
    elem.appendChild(patch(childVnode));
  });
  return elem;
}

2、更新dom(update方法):

function update(vnode, newVnode){
    let children = vnode.children || [] //现有节点
    let newChildren = newVnode.children || [] //新节点
    children.forEach(function(childrenVnode,index) {
        let newChildrenVnode = newChildren[index]
        //第一层没有变化,继续找下一层
        if(childrenVnode.tag === newChildrenVnode.tag){
            update(childrenVnode, newChildrenVnode)
        } else {
            // vue自带函数,更新变化节点
            replaceNode(childrenVnode, newChildrenVnode)
        }
    })
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值