深入理解Vue父子组件生命周期执行顺序及钩子函数

下面是“深入理解Vue父子组件生命周期执行顺序及钩子函数”的完整攻略:

什么是Vue组件生命周期?

Vue组件是Vue.js中最重要的概念之一。一个Vue组件可以看作是一个拥有预定义选项的Vue实例。与Vue实例一样,Vue组件也有它们自己的生命周期。Vue组件的生命周期包括创建、挂载、更新和销毁四个阶段。

为了更好地理解Vue组件生命周期,我们需要明确每个生命周期钩子在什么时候被触发(或者说在什么时候执行)。

Vue父子组件生命周期执行顺序

Vue的父子组件之间的生命周期钩子的执行顺序有一定的规律。具体来说,在一个父组件和它的所有子组件中,首先按照深度优先级别调用父组件的生命周期钩子,接着调用子组件的生命周期钩子。在同一个组件中,钩子按照它们被定义的顺序依次被调用。

Vue父子组件的生命周期执行顺序如下:

  1. 父beforeCreate
  2. 父created
  3. 父beforeMount
  4. 子beforeCreate
  5. 子created
  6. 子beforeMount
  7. 子mounted
  8. 父mounted
  9. 父beforeUpdate
  10. 子beforeUpdate
  11. 子updated
  12. 父updated
  13. 父beforeDestroy
  14. 子beforeDestroy
  15. 子destroyed
  16. 父destroyed

以上顺序是一个通常情况下的执行顺序,如果有特殊情况,可能会有个别钩子的执行顺序发生变化。例如,当在使用 keep-alive 组件时,会添加 activated 和 deactivated 钩子。

Vue父子组件生命周期钩子函数详解

beforeCreate 钩子

在实例被创建之前被调用。在这个阶段,实例的属性、方法、data都没有被初始化。所以在这个钩子函数被调用的时候,我们没有办法访问到组件上定义的 data 属性以及 props 属性。它接收组件的 props 对象作为参数。

示例代码:

Vue.component('my-component', {
  beforeCreate: function () {
    console.log('my-component beforeCreate')
  },
  created: function () {
    console.log('my-component created')
  },
  mounted: function () {
    console.log('my-component mounted')
  }
})

created 钩子

在实例创建完成后立即调用。在这个阶段,实例已经完成了数据的初始化,但是还没有被真正渲染到页面上。所以在这个阶段,我们可以访问组件的 data 属性和 props 属性。因为此时组件已经完成了数据的初始化,所以我们可以在这个钩子函数中访问到 data 和 props 的值。

示例代码:

Vue.component('my-component', {
  created: function () {
    console.log('my-component created')
    console.log('title is ' + this.title) // this.title 是由父组件传递进来的。
  }
})

beforeMount 钩子

在挂载之前被调用。在这个阶段,模板已经编译完成,但是组件还没有被挂载到页面上。在这个钩子函数中,我们可以对组件进行一些操作,例如修改组件的模板。

示例代码:

Vue.component('my-component', {
  beforeMount: function () {
    console.log('my-component beforeMount')
    this.$el.textContent = 'Hello, world!' // 修改组件的模板
  }
})

mounted 钩子

在实例挂载到页面上之后调用。在这个阶段,组件已经被挂载到页面上,我们可以访问到组件的 DOM 元素。在这个钩子函数中,我们可以对组件进行一些操作,例如使用 jQuery 给组件添加事件监听器。

示例代码:

Vue.component('my-component', {
  mounted: function () {
    console.log('my-component mounted')
    $(this.$el).on('click', function () {
      alert('clicked')
    })
  }
})

beforeUpdate 钩子

在数据更新之前调用。在这个钩子函数中,我们可以访问到组件之前的 data 属性和 props 属性,但是我们无法访问更新之后的属性。在这个钩子函数中,我们可以进行预备操作,例如记录一些数据的改变,以便在组件更新完成之后进行判断。

示例代码:

Vue.component('my-component', {
  beforeUpdate: function () {
    console.log('my-component beforeUpdate')
    console.log('title is changing to ' + this.title) // this.title 是更新之前的值。
  }
})

updated 钩子

在数据更新之后调用。在这个阶段,组件已经完成了数据的更新,DOM 也已经重新渲染完毕。在这个钩子函数中,我们可以对组件进行一些操作,例如更新后的属性比较,以提供用户更好的交互体验。

beforeDestroy 钩子

在实例被销毁之前调用。在这个钩子函数中,我们可以进行一些资源的清理工作,例如关闭 WebSocket 连接。在这个钩子函数中,组件仍然完好无损,我们可以访问到组件的所有属性和方法。

示例代码:

Vue.component('my-component', {
  beforeDestroy: function () {
    console.log('my-component beforeDestroy')
    // Close the WebSocket connection here
  }
})

destroyed 钩子

在实例被销毁之后调用。在这个钩子函数中,组件已经被销毁,我们无法访问组件的任何属性和方法。因此,在这个钩子函数中,我们应该进行一些资源的释放操作,例如取消事件的监听。

示例代码:

Vue.component('my-component', {
  destroyed: function () {
    console.log('my-component destroyed')
    // Remove the event listeners here
  }
})

以上就是“深入理解Vue父子组件生命周期执行顺序及钩子函数”的攻略了。若有不明白的地方,请您进一步查阅Vue.js官方文档。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入理解Vue父子组件生命周期执行顺序及钩子函数 - Python技术站

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

相关文章

  • vue如何将后台返回的数字转换成对应的文字

    在 Vue 中,可以通过创建一个映射对象(Map)来将后台返回的数字转换成对应的文字。具体步骤如下: 创建一个映射对象,将数字和文本对应起来: const statusMap = new Map([ [0, ‘未处理’], [1, ‘已处理’], [2, ‘已完成’] ]); 这里可以根据具体业务需求来定义映射关系,例如上面的示例中,我们定义了 0 对应 “…

    Vue 2023年5月27日
    00
  • Vue使用vue-pdf实现PDF文件预览

    下面是“Vue使用vue-pdf实现PDF文件预览”的完整攻略。 什么是vue-pdf vue-pdf是一个基于pdf.js的Vue.js PDF查看器。支持多页和加密PDF文件。 实现方式 安装vue-pdf 在终端中运行以下命令安装 vue-pdf:npm install vue-pdf –save 引入vue-pdf 在Vue组件中引入vue-pdf…

    Vue 2023年5月28日
    00
  • Vue中foreach数组与js中遍历数组的写法说明

    关于Vue中forEach数组与JavaScript中遍历数组的写法说明,我来给您详细讲解一下。 1. JavaScript中遍历数组的写法 在JavaScript中,我们可以使用for循环遍历数组,也可以使用forEach方法遍历数组。具体写法如下: 1.1 使用for循环遍历数组 let arr = [1, 2, 3, 4, 5] for (let i …

    Vue 2023年5月28日
    00
  • vue中集成省市区街四级地址组件的实现过程

    下面就为你详细讲解vue中集成省市区街四级地址组件的实现过程的完整攻略。 一、什么是省市区街四级地址组件 省市区街四级地址组件是一种常见的地址选择器,用户可以通过该组件非常方便的选择自己所在的省份、城市、区县和街道信息。 二、如何集成省市区街四级地址组件 1. 使用第三方库 可以直接使用第三方的地址组件库来快速实现,在vue中,常见的第三方库有vue-qui…

    Vue 2023年5月27日
    00
  • Android面向切面基于AOP实现登录拦截的场景示例

    下面我来为您详细讲解“Android面向切面基于AOP实现登录拦截的场景示例”的完整攻略。 什么是AOP AOP(Aspect Oriented Programming),面向切面编程,是一种编程范式,它旨在解决开发中的横切关注点问题。横切关注点是指在整个应用中有多个不同的模块都需要共同解决的问题,比如日志、事务、缓存等。AOP可以帮助我们把这些横切关注点从…

    Vue 2023年5月28日
    00
  • Vue3全局组件通信之provide / inject详解

    当我们开发Vue3应用时,有时候会需要在多个组件之间进行数据传递,这时候就需要用到全局组件通信。Vue3中提供了两种方式进行全局组件通信,一种是provide / inject,另一种是Vuex状态管理,本文主要介绍前者。 一、provide / inject说明 provide / inject是Vue3中提供的API,用于在父组件中提供数据,然后在子组件…

    Vue 2023年5月27日
    00
  • VUE v-for中的:key详解

    当在 Vue 的模板中使用 v-for 来循环渲染一组 DOM 元素时,每个被渲染的元素都要有一个唯一的 key 属性。这个属性在 Vue 的模板编译器中扮演着非常重要的角色,它可以帮助 Vue 跟踪每个被渲染的元素的身份和状态,从而优化渲染效果。 key 的作用 一个简单的示例,我们假设一个列表,其中有一些元素是需要从列表中删除的,那么删除时就需要更新数据…

    Vue 2023年5月28日
    00
  • VUE3+TS递归组件实现TreeList设计实例详解

    让我详细讲解一下“VUE3+TS递归组件实现TreeList设计实例详解”的完整攻略。 1. TreeList设计概述 TreeList 是一种常见的树状结构列表,它通常用于展示带有层级关系的数据,比如公司部门结构。本文将详细介绍如何使用 VUE3 和 TypeScript 实现一个高效的递归组件,来实现 TreeList 设计。 2. 实现步骤 2.1 V…

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