Vue原理

如何理解MVVM

组件化

数据驱动视图

MVVM (Model View ViewModel)

Vue响应式原理

核心API:Object.defineProperty

const data={};
const name='zhangsan';

Object.defineProperty(data,name,{
get:function(name){
console.log('get');
return name
},
set:function(newval){
console.log('set');
name=newval;
}
})

Object.defineProperty的缺点:

深度监听,需要递归到底,计算量大

无法监听新增属性和删除属性,需要用到Vue.set和Vue.delete

Vue如何监听数组变化

if(Array.isArray(target)){
target.proto=arrproto;
}

const oldArrayProperty=Array.prototype;
const arrproto=Object.create(oldArrayProperty);
['push','pop','shift','unshift','splice'].forEach(
methodName=>arrproto[methodName]=function(){
updateView();
oldArrayProperty[methodname].call(this,...arguments);
}
);

diff算法

1.只比较同一层级,不跨级比较

2.tag不相同,则直接删掉重建,不再深度比较

3.tag和key,两者都相同,则认为是相同节点,不再深度比较

vue组件是如何渲染和更新的

初次渲染过程

解析模板为render函数

触发响应式,监听data属性 getter setter

执行render函数,生成vnode,patch(elem,vnode)

更新过程

修改data,触发setter

重新执行render函数,生成newVnode

patch(Vnode,newVnode)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值