钩子函数:可以简单理解为是一种系统在不同的阶段自动执行、用户无须干预的函数
Vue2生命周期
Vue3生命周期
主要Vue生命周期事件被分为两个钩子,分别在事件之前和事件之后调用,vue应用程序中有4个主要事件(8个钩子)
● 创建–在组件创建时执行
● 挂载–DOM被挂载时执行
● 更新–当响应数据被修改时执行
● 销毁–在元素被销毁之前立即执行
在【options API】中,生命周期钩子是被暴露在vue实例上的选项,我们只需要调用使用即可
在【composition API】中,我们需要将生命周期钩子引入项目,才能使用
import { onBeforeMount, onMounted, onBeforeUpdate, onUpdated, onBeforeUnmount, onUnmounted } from 'vue'
组合API中,使用setup()方法替换了beforeCreate和created,那么这两个生命周期中的方法将放在setup()中执行
- beforeCreate
- 注意点:在此时不能获取data中的数据,也就是说this.$data得到的是undefined
- created
- 在组件DOM实际渲染之前调用,此时根元素还不在,在选项API中,可以使用this.$data来访问;在组合API中,想访问的话就必须在根元素上使用ref
import { ref, onBeforeMount } from "vue"; export default { setup() { console.log("setup,创建前后") const count = ref({ str: '你好', number: 123 }) onBeforeMount(() => { console.log("onBeforeMount -- composition API", "挂载前",count.value.str) }) return { count, } }, data(){ return{ number: 123 } }, beforeMount() { console.log("beforeMount -- options API,挂载前",this.$data.number) },
- mounted()、onMounted()【页面加载完毕的时候就是此时】
- 注意点:默认情况下,在组件的生命周期中只会触发一次
import { ref, onMounted } from "vue"; export default { setup() { console.log("setup,创建前后") const count = ref({ str: '你好', number: 123 }) onMounted(() => { console.log("onMounted -- composition API", "挂载前",count.value.str) }) return { count, } }, data(){ return{ number: 123 } }, mounted() { console.log("mounted -- options API,挂载前",this.$data.number) },
- 数据更新时调用,DOM更新后,updated()、onUpdated()方法就会调用
- 可以重复触发的
Hello World
{{ count.str }}
Hello World
{{ this.$data.number }}
何时触发?:关闭页面(不是浏览器)
4阶段,8个周期函数