Vue生命周期实例分析总结

Vue生命周期实例分析总结

生命周期钩子函数

Vue实例有一个完整的生命周期,从开始创建、初始化数据、编译模板、挂载DOM、渲染、更新、销毁等一系列过程,我们称这是Vue的生命周期,通常也称为生命周期钩子函数。生命周期钩子函数包含如下几个阶段:

  1. beforeCreate:实例刚在内存中被创建出来,此时,还没有初始化好 data 和 methods 属性。

  2. created:实例已经在内存中创建完成,此时 data 和 methods 已经创建完成,此时还没有开始编译模板。

  3. beforeMount:此时,模板已经在内存中编译完成,但还没有挂载到页面中。

  4. mounted:此时,模板已经挂载到了页面中,喜提$el 属性

  5. beforeUpdate:组件内部数据有变化,Vue 将要立即重新渲染虚拟 DOM 并应用更新。此时还没有开始重新渲染。

  6. updated:Vue 已经重新渲染并更新了虚拟 DOM 中的元素。此时组件更新完成。

  7. beforeDestroy:Vue实例销毁之前回调该方法,通常在这个钩子函数里面可以进行一些收尾工作,比如清除定时器。

  8. destroyed:Vue实例销毁之后调用该方法,销毁完毕的Vue实例。

实例分析

下面我们来运用钩子函数的知识来进行实例分析:

实例1

<template>
  <div>
    <h2>{{ message }}</h2>
  </div>
</template>

<script>
export default {
  data () {
    return {
      message: "Hello Vue!"
    }
  },
  beforeCreate () {
    console.log('在 Vue 实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。')
  },
  created () {
    console.log('在实例创建完成后被立即调用。在这一步,实例已经完成以下的配置:数据观测(data observer),属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前还不存在')
  },
  beforeMount () {
    console.log('在挂载开始之前被调用:相关的 render 函数首次被调用。')
  },
  mounted () {
    console.log('在挂载完成后被调用,即dom挂载完成后调用该函数。此时,组件已经显示在页面中.')
  },
  beforeUpdate () {
    console.log('在数据更新之前被调用,发生在虚拟 DOM 重新渲染和打补丁之前。')
  },
  updated () {
    console.log('在由于数据更改导致的虚拟 DOM 重新渲染和打补丁之后立即调用。')
  },
  beforeDestroy() {
    console.log('在实例销毁之前调用。这一步,实例仍然完全可用。')
  },
  destroyed () {
    console.log('在实例销毁之后调用。')
  }
}
</script>

当我们运行以上代码,控制台输出的内容如下:

在 Vue 实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。
在实例创建完成后被立即调用。在这一步,实例已经完成以下的配置:数据观测(data observer),属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前还不存在
在挂载开始之前被调用:相关的 render 函数首次被调用。
在挂载完成后被调用,即dom挂载完成后调用该函数。此时,组件已经显示在页面中.

可见,控制台首先输出了 beforeCreate 的内容,说明在实例创建的初始化阶段,beforeCreate函数被调用。接着输出了 created 的内容,说明在实例创建完成之后,实例完成了对数据、属性、方法的配置等工作。接着输出了 beforeMount 的内容,说明挂载前相关的render函数被调用。最后输出 mounted 的内容,说明实例挂载完成,组件已经显示在页面中。

实例2

下面,我们再举一个例子。

<template>
  <div>
    <h2>{{ message }}</h2>
  </div>
</template>

<script>
export default {
  data () {
    return {
      message: "Hello Vue!"
    }
  },
  beforeCreate () {
    console.log('在 Vue 实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。')
  },
  created () {
    console.log('在实例创建完成后被立即调用。在这一步,实例已经完成以下的配置:数据观测(data observer),属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前还不存在')
  },
  beforeMount () {
    console.log('在挂载开始之前被调用:相关的 render 函数首次被调用。')
  },
  mounted () {
    console.log('在挂载完成后被调用,即dom挂载完成后调用该函数。此时,组件已经显示在页面中.')
  },
  beforeUpdate () {
    console.log('在数据更新之前被调用,发生在虚拟 DOM 重新渲染和打补丁之前。')
  },
  updated () {
    console.log('在由于数据更改导致的虚拟 DOM 重新渲染和打补丁之后立即调用。')
  },
  beforeDestroy() {
    console.log('在实例销毁之前调用。这一步,实例仍然完全可用。')
  },
  destroyed () {
    console.log('在实例销毁之后调用。')
  }
}
</script>

当我们运行以上代码,控制台输出的内容如下:

在 Vue 实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。
在实例创建完成后被立即调用。在这一步,实例已经完成以下的配置:数据观测(data observer),属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前还不存在
在挂载开始之前被调用:相关的 render 函数首次被调用。
在挂载完成后被调用,即dom挂载完成后调用该函数。此时,组件已经显示在页面中.
在数据更新之前被调用,发生在虚拟 DOM 重新渲染和打补丁之前。
在由于数据更改导致的虚拟 DOM 重新渲染和打补丁之后立即调用。
在实例销毁之前调用。这一步,实例仍然完全可用。
在实例销毁之后调用。

这个例子和第一个例子做了相同的事情,不过多了几个生命周期。

输出了 beforeUpdate 的内容,说明在数据更新之前调用了beforeUpdate函数。最后输出 destroyed的内容,说明实例被销毁了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue生命周期实例分析总结 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue发送websocket请求和http post请求的实例代码

    我来帮你讲解一下。 发送websocket请求 在Vue中,我们可以使用vue-websocket库来实现对Websocket的使用。首先,在项目中安装vue-websocket库: npm install vue-websocket –save 接下来,在Vue实例中,我们需要使用mixins来引入websocket相关配置,并且在钩子函数中绑定事件和发…

    Vue 2023年5月28日
    00
  • 面试问题Vue双向数据绑定原理

    面试问题Vue双向数据绑定原理 前言 在Vue中,双向数据绑定是一项非常重要的特性,也是其比较独特的特性之一。理解Vue中双向数据绑定的原理,是面试Vue开发岗位的常见问题之一。本篇文章将从以下几个方面来讲解Vue双向数据绑定的原理:Vue的响应式系统、Object.defineProperty()、实现双向绑定的具体原理以及如何自定义实现双向绑定。 Vue…

    Vue 2023年5月28日
    00
  • webpack安装配置与常见使用过程详解(结合vue)

    一、安装配置 安装 Node.jsWebpack 基于 Node.js,需要先安装 Node.js。官网下载地址:https://nodejs.org/en/ 全局安装 webpack使用 npm 进行安装: npm install webpack -g 全局安装 webpack-cli 使用 npm 进行安装: npm install webpack-cl…

    Vue 2023年5月28日
    00
  • vue中的scope使用详解

    Vue中的Scope使用详解 在Vue中,我们可以通过在模板中使用v-for指令来遍历数据,然后使用v-bind或简写方式:将数据传递给子组件。但是,有时候我们需要将数据传递到子组件中,而不需要在父级模板中显示这些数据。为了实现这一点,Vue提供了scope属性,这可以让我们创建一个只传递特定数据子组件的插槽。 父组件和子组件之间使用Scope 假设我们有以…

    Vue 2023年5月27日
    00
  • vue 项目接口管理的实现

    下面是关于“Vue 项目接口管理的实现”的攻略: 一、前言 在Vue开发中,数据的获取和处理是必不可少的。如果您的项目已经非常复杂,那么您最好要考虑如何规范接口的使用,否则将会十分混乱。本文将为您讲解Vue项目中如何有效管理接口和如何与后端进行联调。 二、接口管理的实现 1. 接口管理方案 接口管理可以通过建立一个独立的接口文件夹来实现,这个文件夹可以包括接…

    Vue 2023年5月28日
    00
  • vue 数据(data)赋值问题的解决方案

    下面是关于“vue 数据(data)赋值问题的解决方案”的完整攻略,主要包括以下方面的内容: 问题背景 解决方案原理 解决方案具体实现及示例说明 总结 问题背景 在vue项目开发中,我们常常会遇到在方法中通过this.data的方式来赋值的问题。这种方式在大量运用时常常使代码变得很难维护。因此,我们需要了解如何通过一些方法或工具来解决数据赋值问题。 解决方案…

    Vue 2023年5月28日
    00
  • vue与django集成打包的实现方法

    实现 Vue 和 Django 的集成打包,需要以下步骤: 1. 创建 Vue 应用程序 首先,我们需要创建一个 Vue 应用程序。在使用 Vue CLI 创建应用程序后,确保在命令行中运行npm run build 命令来打包应用程序。 $ vue create my-vue-app $ cd my-vue-app $ npm install $ npm …

    Vue 2023年5月28日
    00
  • vue 使用el-table循环生成表格的过程

    下面我将详细讲解使用 Vue 和 el-table 循环生成表格的完整攻略。该过程可以分为以下几个步骤: 引入必须的依赖 首先,需要在你的代码中引入必须的依赖,这包括 Vue 框架及其 Element-UI 组件库。 <!– index.html –> <!– 引入 Vue 和 Element-UI–> … <scr…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部