Vue
生命周期
概念
组件从创建到销毁的整个过程就是生命周期。
钩子函数
作用:在特定时间节点执行特定的操作。
| 阶段 | 方法名 | 方法名 |
|---|---|---|
| 初始化 | beforeCreate | created |
| 挂载 | beforeMount | mounted |
| 更新 | beforeUpdate | updated |
| 销毁 | beforeDestroy | destroyed |
初始化阶段
- 实例化
Vue对象,初始化事件和生命周期函数。 - 生命周期函数钩子
beforeCreate被执行。此时函数
beforeCreate获取不到数据。 Vue内部添加数据data和函数方法methods等。- 生命周期函数钩子
created被执行。此时函数
created能够拿到数据并输出了,但是不能获取真实dom节点。一般在这里发送ajax请求。 - 编译分析。
beforeCreate () {
console.log('beforeCreate',this.msg);
},
created () {
console.log('created',this.msg);
console.log('created',document.querySelector('h1'));
}
挂载阶段
- 检查
template选项。 - 虚拟
dom准备挂载到真实dom。 - 生命周期函数钩子
beforeMount被执行。此时仅仅是找到模板,渲染模板之前的钩子函数,真实
dom还未挂载,依旧获取不到真实dom。 - 把虚拟
dom和渲染的数据一并挂载到真实dom上。 - 真实
dom挂载完毕,生命周期函数钩子mounted被执行。现在可以获取到真实
dom了,可以操作dom,也可以发起ajax请求,请求初始数据。
beforeMount () {
console.log('beforeMount',document.querySelector('h1'));
},
mounted () {
console.log('mounted',document.querySelector('h1'));
}
更新阶段
- 在
data数据改变、dom更新之前。 - 生命周期函数钩子
beforeUpdate被执行。发生在
dom数据改变前,此时拿到的还是老数据。 - 虚拟
dom重新渲染,打补丁到真实dom。 - 生命周期函数钩子
updated被执行。发生在
dom数据改变后,此时可以拿到新数据了。 - 当
data数据改变时,重复这个循环。
beforeUpdate () {
console.log('beforeUpdate',document.querySelector('h1').innerHTML);
},
updated () {
console.log('updated',document.querySelector('h1').innerHTML);
}
销毁阶段
- 方法
$destroy()被调用后(比如v-if移除dom节点),执行beforeDestroy生命周期钩子函数。这个钩子主要作用是用来清除定时器或全局事件的。当我们销毁组件时,是不会销毁定时器的,需要我们手动销毁定时器。
- 拆卸定时器、计时器、事件侦听器。
- 实例销毁后,生命周期函数钩子
destroyed被执行。
axios
nextTick 和 refs
$refs
作用
- 利用
ref和refs获取到dom元素。 - 利用
$refs获取组件对象。
总结:
ref定义值,通过$refs来获取组件对象,就能继续调用组件内的变量。
nextTick
前提:
在
Vue中更新dom是异步的。如果马上通过原生dom拿标签的方式肯定拿不到更新后的值。