虚拟DOM 和 DOM diff

一、什么是虚拟DOM

一个能表示DOM树的对象,通常含有标签名、标签上的属性、事件监听和子元素们,以及其他属性

二、虚拟DOM有什么优点

1. 减少DOM操作

  • 虚拟DOM可以将多次操作合并为一次操作。
  • 虚拟DOM借助DOM diff 可以将多余的操作省略

2. 跨平台

  • 虚拟DOM不仅可以变成DOM,还可以变成小程序、iOS应用,因为虚拟DOM本质是JS对象

三、虚拟DOM有什么缺点

需要额外的创建函数,如createElement 或 h,但可以通过 JSX 来简化成 XML 语法

四、虚拟DOM是什么样子

React

const vNode = {
  key: null,
  props: {
    children: [
      {type: 'span', ...},
      {type: 'span', ...}
    ],
    className: "red",
    onClick: ()=>{}
  },
  ref: null,
  type: "div",
  ...
}

Vue

const vNode = {
  tag: 'div',
  data: {
    class: 'red',
    on: {
      click: ()=>{}
    }
  },
  children: [
    {tag: "span", ...},
    {tag: "span", ...}
  ],
  ... 

五、如何创建虚拟DOM

React

createElement('div', {className: "red", onClick: ()=>{}, [
  createElement('span', {}, 'span1'),
  createElement('span', {}, 'span2')
]})

Vue

h('div', {
  class: 'red',
  on: {
    click: ()=>{}
  }
}, [h('span', {}, 'span1'), h('span', {}, 'span2')])

React JSX

<div className="red" onClick="{fn}">
  <span>span1</span>
  <span>span1</span>
</div>

Vue Template

<div class="red" @click="fn">
  <span>span1</span>
  <span>span1</span>
</div>

六、什么是DOM diff

DOM diff其实就是一个函数,它会对比 oldNode 与 newNode 的区别。从而减少不必要的渲染。但是DOM diff会有bug。造成页面渲染的误操作,可以使用key来辅助diff的对比。从而消除bug。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值