vue渲染的两条线(如何将虚拟dom转化成真实dom)-patch,update

// vue的渲染有两条线 (vue是怎么样将虚拟dom转化为真实dom的)
// 1.初始化 patch(container,vnode)
// 2.更新 update(vnode,newVnode)

function createElement(vnode) {
  // 虚拟dom组成的三要素
  let tag = vnode.tag; // 目标元素 ul
  let attrs = vnode.attrs || {}; // 属性
  let children = vnode.children || []; // 子节点

  if (!tag) {
    return null;
  }
  // 1.创建对应的dom
  let elem = document.createElement(tag);
  let attrName;
  // 2.给dom添加属性
  for (attrName in attrs) {
    if (attrName.hasOwnProperty(attrName)) {
      elem.setAttribute(attrName, attrs[attrName]);
    }
  }

  // 3。将子元素添加到目标之上
  children.forEach(function (childVnode) {
    elem.appendChild(createElement(childVnode));
  });
  return elem;
}

function updateChildren(vnode, newVnode) {
  let children = vnode.childVnode || []; // 现有节点
  let newChildren = newVnode.children || []; // 新节点
  children.forEach(function (childVnode, index) {
    // 循环的每一项
    let newChildrenVnode = newChildren[index];
    // 第一层没有变化
    if (childVnode.tag === newChildrenVnode.tag) {
        // 深层次对比==>递归
      updateChildren(childVnode, newChildrenVnode);
    } else {
      // 两者tag不一样,替换tag
      replaceNode(childVnode, newChildrenVnode);
    }
  });
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值