初步认识生命周期的创建和销毁过程
生命周期是什么?生命周期中有哪些东西?
在我们的组件中,从创建到运行到销毁的阶段叫做生命周期。从我们数据被定义,到渲染到页面上,然后进行销毁的过程
vue组件运行的过程,也可以概括为生命周期
vue组件的初始化,表示生命周期的开始,vue组件的销毁,表示生命周期的结束;vue组件运行的过程可以叫做生命周期
生命周期函数(钩子函数)
生命周期函数,是由vue框架提供的内置函数;会伴随着组件的生命周期,自动按次序执行
生命周期函数的作用,允许程序员在特定的事件点,执行特定的事件
例如,组件创建完毕后,可以在created生命周期中发起ajax请求,从而初始化data
组件生命周期分类
创建阶段的生命周期:
beforeCreate:创建前,准备获取数据了,但是获取不到当前组件实例的数据和方法(但是部分的原型事件可以获取到),获取不到dom节点
created:创建后,可以获取到数据,但是获取不到dom节点
<template> <div id="name">{{name}}</div> </template> <script> export default { data() { return { name: `时不我待` } }, //(1)第一个生命周期的钩子,我要开始挂载数据了,但是还没有获取数据,数据初始化之前调用 beforeCreate() { console.log(`数据创建前`+this.name) //undefined }, //(2)可以获取到数据,但是没有获取到dom元素,数据挂载完毕以后,组件methods可以访问到 created() { console.log(`数据创建完成`+this.name)//时不我待 console.log(`获取dom元素`+document.querySelector(`#name`))//null }, } </script>
挂载阶段的生命周期
beforeMount:挂载前,和创建后基本上没有区别,声明要开始解析template
mounted:挂载后,整个组件挂载完毕,可以获取到真实dom,获取到真实数据,把数据渲染到页面上边
//(3)挂载前,还没有挂载,拿不到dom节点,但是可以拿到数据 beforeMount() { console.log(`挂载前`+this.name)//时不我待 }, //(4)挂载,可以拿到dom节点,可以拿到数据,把数据渲染到页面上 mounted() { console.log(`挂载获取dom元素`+document.querySelector(`#name`)) //object HTMLDivElement },
更新页面阶段的生命周期
beforeupdata:当我们更新数据的时候,它会声明我要开始更新数据了,但是它还没有开始更新数据,是获取不到更之后的最新dom节点
updata:更新数据,他会把拿到最新的数据进行更新,可以拿到最新数据和dom节点
//(5)更新之前,我要开始更新数据了,但是还没有进行更新,可以获取到最新的数据,但是获取不到最新的dom节点 beforeUpdate() { console.log(`更新前数据`+this.name)//更新后的数据 console.log(`更新前的dom节点`+document.querySelector(`#name`))//object HTMLDivElement }, //(6)数据更新,更新数据,可以获取最新的数据和最新的dom节点 updated() { console.log(`更新后的数据`+this.name) console.log(`更新后的数据`+document.querySelector(`#name`)) }
销毁阶段的生命周期
beforeDestroy:准备销毁组件,销毁的组件。清除定时器相关的副作用操作,解绑一些事件
data:销毁组件完成,什么都不存在了
beforeDestroy() { // 清除定时器相关的副作用操作 // 解绑一些事件 }, destroyed() { // 销毁完成,什么都不会存在了 },
父子组件挂载渲染的顺序
走父组件的beforeCreate
走父组件的created
走父组件的beforeMount
走父组件的mounted
走父组件的beforeupdata
走子组件的beforeCreate
走子组件的created
走子组件的beforeMount
走子组件的mounted
走子组件的beforeupdata
走子组件的updata
走父组件的updata
父组件
<template> <div id="name"> {{name}} <button @click="name=`更新后的数据`">点击我修改新属性</button> <zhouqi></zhouqi> </div> </template> <script> import zhouqi from "@/components/zhouqi"; export default { components : { zhouqi }, data() { return { name: `时不我待` } }, //(1)第一个生命周期的钩子,我要开始挂载数据了,但是还没有获取数据,数据初始化之前调用 beforeCreate() { console.log(`数据创建前`+this.name) //undefined }, //(2)可以获取到数据,但是没有获取到dom元素,数据挂载完毕以后,组件methods可以访问到 created() { console.log(`数据创建完成`+this.name)//时不我待 console.log(`获取dom元素`+document.querySelector(`#name`))//null }, //(3)挂载前,还没有挂载,拿不到dom节点,但是可以拿到数据 beforeMount() { console.log(`挂载前`+this.name)//时不我待 }, //(4)挂载,可以拿到dom节点,可以拿到数据,把数据渲染到页面上 mounted() { console.log(`挂载获取dom元素`+document.querySelector(`#name`)) //object HTMLDivElement }, //(5)更新之前,我要开始更新数据了,但是还没有进行更新,可以获取到最新的数据,但是获取不到最新的dom节点 beforeUpdate() { console.log(`更新前数据`+this.name)//更新后的数据 console.log(`更新前的dom节点`+document.querySelector(`#name`))//object HTMLDivElement }, //(6)数据更新,更新数据,可以获取最新的数据和最新的dom节点 updated() { console.log(`更新后的数据`+this.name) console.log(`更新后的数据`+document.querySelector(`#name`)) }, //(7)准备销毁组件 beforeDestroy() { // 清除定时器相关的副作用操作 // 解绑一些事件 }, //(8)销毁组件 destroyed() { // 销毁完成,什么都不会存在了 }, } </script>
子组件
<template> <div> {{name}} </div> </template> <script> export default { name: "fuzi", beforeDestroy() { console.log(`子更新数据之前`) }, data() { return { name: `学而时习之` } }, created() { console.log(`子更新数据,但是获取不到data`+this.msg) }, beforeMount() { console.log(`子更新dom之前,但是没有获取到dom`+this.msg) }, mounted() { console.log(`子更新dom之后`) }, } </script>
标签:生命周期,console,log,dom,组件,数据,name From: https://www.cnblogs.com/hgng/p/17038369.html