vue的nextTick方法原理与vue的小问题

什么是响应式,

实时监听数据变化

如何监听数据变化

使用Object.defineProperty函数可以检测到数据变化
具体步骤可自行实现

更改数据后,页面会立刻重新渲染吗?

vue更新DOM的操作是异步执行的,
只要侦听到数据变化,将开启一个异步队列,
如果一个数据被多次变更,那么只会被推入到队列中一次,这样可以避免不必要的计算和DOM操作。

如果想要更改数据后,才去渲染页面,改如何操作

使用vm.$nextTick或Vue.nextTick
该方法会在页面重新渲染,DOM更新后,立即执行该方法
注:页面渲染操作是异步执行的
vm.$nextTick或Vue.nextTick也可作为promise使用

回忆:事件(event loop事件环)【同步执行栈,异步队列(分为:宏队列,微队列)】
宏任务:setTimeout

vm.$nextTick和Vue.nextTick的区别

vm.$nextTick内部函数的this指向的是vue实例也就是定义的vm[const vm = new Vue()]
Vue.nextTick内部函数的this指向的是widow

$nextTick内部是如何实现的(原理)

页面渲染完成后立即执行,
立即执行就说明要越快越好,【注:宏任务慢,微任务快】
所有会让它先执行微任务,如果浏览器不支持微任务则执行宏任务;
微任务有哪些:Promise,MutationObserver[突变观察,vue源码内部创建假节点,然后让假节点稍微改动一下,然后触发方法执行函数]
宏任务:setTmmediate[IE浏览器下可能会执行该任务;该宏任务比setTimeout快一些] ,setTimeout
原理:
if(typeof Promise !== 'undefined'){

}else if(typeof MutationObserver !=="undefined"){

}else if(setTmmediate !=="undefined"){

}else{
 //setTimeout
}

vue有些小问题

vue渲染的过程总是在等主线程执行同步任务完毕后再去执行异步任务,最后渲染,
假如该主线程执行同步任务的过程中有些问题卡在那了,
最终会导致页面卡在那不动了[因为主线程的同步任务报错了,一直卡在那,页面就不会渲染,就会导致页面卡死]
vue的小问题,就是不将主线程让出来,干等死等,不完使事就不渲染;
而react则不会,随时都不会把主线程让出来,只要有空就回去渲染

vue修改数据不能导致页面重新渲染

1、更改数组【原来的基础上更改数组】:
    a:通过更改索引的方式更改数组
        arr=["a","b":"c"]
        vm.arr[3]="D";
    b:更改长度
        arr=["a","b":"c"]
        vm.arr.length=0
2、对象增删
    a:增加
        obj={a:1,b:2}
        vm.obj.c=3;
        {{obj.c}}
    b:删除
        delete vm.obj.a;

vue 响应式更改数组数据

1、变异方法:push、//增加
        splice、//截取
        prop、
        shift、
        unshift、
        sort、
        reverse
2、vm.$set(要改谁,改什么,改成啥)或Vue.set()
           arr=["a","b":"c"]
           vm.$set(vm.arr,3,"d")
3、vm.$delete(要删除谁的值,删除哪个)
           vm.$delete(vm.arr,3)

vue 响应式更改对象数据

  2、vm.$set(要改谁,改什么,改成啥)或Vue.set()
           obj={a:1,b:2}
          vm.$set(vm.arr,"c","3")
  3、vm.$delete(要删除谁的值,删除哪个)
          vm.$delete(vm.arr,"c")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值