vue强制更新视图_Vue原理分析

一 数据驱动视图

传统组件只是静态渲染,更新还要依赖于操作DOM

vue数据驱动视图 - MVVM

React数据驱动视图 - setState

338ee792b54efbe162ca1f4d45c2c6e4.png

js对象通过指令修改dom的视图,而dom通过dom事件监听等方式来修改vue内部js对象

二 Vue响应式

组件data的数据一旦变化,立刻触发视图的更新。这是数据驱动的第一步。

Object.defineProperty Vue响应式核心API

Object.defineProperty缺点(需要其他实现方式):

  1. 深度监听需要递归到底,一次性计算量大。
  2. 无法监听新增属性/删除属性。(Vue.set, Vue.delete)。
  3. 无法原生监听数组,需要特殊处理。

三 虚拟DOM(Virtual DOM) 和 diff

vdom是实现vue和react的重要基石, diff是vdom最核心,最关键的部分。

DOM操作本身非常耗费性能,以前的jquery可以自行操作dom的时机,手动调整。

Vue和React是数据驱动视图,解决方案就是vdom

把复杂的计算更多的转移到js,因为js执行速度很快,用js模拟dom,计算出更小的变更操作dom。

下图解释了如何模拟操作dom

fbe320b2da1fae65e458dcf204dfcd1c.png

这里推荐snabbdom库,简洁强大,易学易用,vue参考它实现了vdom和diff算法(树diff算法时间复杂度o(n的三次方))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值