NextTick是什么
官方的定义是这样的:
在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM
看起来不要好理解, 那么它是什么意思呢?
我们可以理解成,Vue 在更新 DOM 时是异步执行的。当数据发生变化,Vue将开启一个异步更新队列,视图需要等队列中所有数据变化完成之后,再统一进行更新
对比图片理解一下 可能效果会更好
🍙🍙🍙🍙举个栗子
html样式
<div id="app"> {{ message }} </div>
构建一个vue实例
const vm = new Vue({
el: '#app',
data: {
message: '原始值'
}
})
修改message
this.message = '修改后的值1'
this.message = '修改后的值2'
this.message = '修改后的值3'
这时候想获取页面最新的DOM节点,却发现获取到的是旧值
这是因为message数据在发现变化的时候,vue并不会立刻去更新Dom,而是将修改数据的操作放在了一个异步操作队列中
如果我们一直修改相同数据,异步操作队列还会进行去重
等待同一事件循环中的所有数据变化完成之后,会将队列中的事件拿来进行处理,进行DOM的更新
为什么要有nexttick
{{num}}
for(let i=0; i<100000; i++){
num = i
}
如果没有 nextTick 更新机制,那么 num 每次更新值都会触发视图更新(上面这段代码也就是会更新10万次视图),有了nextTick机制,只需要更新一次,所以nextTick本质是一种优化策略
Keep-alive 是什么
-
keep-alive 是vue中的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM
-
keep-alive 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们 它会让被缓存的组件多出两个钩子
activaed ===> 激活 deadtivated ===> 失活
关于keep-alive的基本用法:
<keep-alive>
<component :is="view"></component>
</keep-alive>
使用场景
使用原则:当我们在某些场景下不需要让页面重新加载时我们可以使用keepalive
举个栗子:
当我们从首页–>列表页–>商详页–>再返回,这时候列表页应该是需要keep-alive
从首页–>列表页–>商详页–>返回到列表页(需要缓存)–>返回到首页(需要缓存)–>再次进入列表页(不需要缓存),这时候可以按需来控制页面的keep-alive