首页 > 其他分享 >生命周期

生命周期

时间:2023-01-09 19:44:06浏览次数:34  
标签:生命周期 console log dom 组件 数据 name

初步认识生命周期的创建和销毁过程

生命周期是什么?生命周期中有哪些东西?

在我们的组件中,从创建到运行到销毁的阶段叫做生命周期。从我们数据被定义,到渲染到页面上,然后进行销毁的过程

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

相关文章

  • 脚本生命周期
    问题待解决不在脚本中写构造函数Unity脚本生命周期初始阶段Awake()OnEnable()Start()物理阶段FixedUpdate()0.02s游戏逻辑Update()60hzLateUpdate()......
  • 学习笔记——在IDEA中创建Maven工程之HelloWord;Maven中常见的问题;Maven核心概念之POM
    2023-01-08一、在IDEA中创建Maven工程之HelloWord(1)新建一个Maven工程  最后点击“finish”,完成项目创建(2)在创建的项目下,选中“maven_demo”,右击新建“Module”,选......
  • Spring之bean的七步生命周期
    bean的七步生命周期(1)调用无参数构造方法创造bean实例(2)调用set方法对bean的属性及其他bean的引用属性进行设置(3)把bean实例传递给bean的后置处理器方法postProcessBeforeI......
  • 学习笔记——过滤器、过滤器的HelloWord、过滤器生命周期
    2023-01-06一、过滤器(Filter)1、概念:Filter是一个实现了特殊接口(Filter)的java类,实现对请求资源(jsp,servlet,html)的过滤的功能。过滤器是一个运行在服务器的程序,优先于请求......
  • 002es生命周期之索引别名的使⽤
    简介:es之索引别名的使⽤别名有什么用在开发中,随着业务需求的迭代,较⽼的业务逻辑就要⾯临更新甚⾄是重构,⽽对于es来说,为了适应新的业务逻辑,可能就要对原有的索引做⼀些修......
  • Android四大基本组件介绍与生命周期
    ​​Android四大基本组件介绍与生命周期​​Android四大基本组件分别是Activity,Service服务,ContentProvider内容提供者,BroadcastReceiver广播接收器。一:了解四大......
  • spring中Bean生命周期
    1.普通java对象创建过程举例:BusinessServicebusinessService=newBusinessService();编译:将.java文件编译成class文件加载:等到类需要被初始化时(比如new)class文件被虚......
  • Vue的生命周期
    1.beforeCreate:无法通过vm,访问data,和methods。2.created:可以通vm,访问data和methods的方法。3.beforeMount:(1).生成未经vue编译的DOM结构,        ......
  • Java线程生命周期
    java.lang.Thread类包含一个静态枚举,它定义了它的潜在状态。在任何给定的时间点内,线程只能处于以下状态之一:NEW–一个新创建的线程,尚未开始执行RUNNABLE–正在运行......
  • Pod生命周期
    PodphasePod的status字段是一个PodStatus对象,PodStatus中有一个phase字段。Pod的相位(phase)是Pod在其生命周期中的简单宏观概述。该字段并不是对容器或Pod......