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

yizhihongxing

下面是“深入理解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.js中Vue-router 2.0基础实践教程

    下面是“vue.js中Vue-router 2.0基础实践教程”的完整攻略: 什么是Vue-router? Vue-router是Vue.js官方的路由管理器。它与Vue.js深度集成,可以非常方便地实现单页应用中的路由跳转、参数传递、路由拦截等功能。Vue-router的核心概念包括路由、参数、钩子、子路由等。 安装和使用Vue-router 安装Vue-…

    Vue 2023年5月28日
    00
  • uniapp中微信小程序与H5相互跳转以及传参详解(webview)

    uniapp中微信小程序与H5相互跳转以及传参详解(webview) 简介 在移动端开发中,有时需要在微信小程序和H5页面之间相互跳转,比如在小程序中点击某个按钮跳转到H5页面,或者在H5页面中点击某个链接跳转到小程序,这就需要涉及到两个不同的平台之间的交互。本文主要介绍在uniapp开发中,使用webview实现微信小程序与H5页面之间的相互跳转和传参的详…

    Vue 2023年5月28日
    00
  • vue 导出文件,携带请求头token操作

    让我详细讲解一下 “vue 导出文件,携带请求头token操作” 的完整攻略。 导出文件 要导出文件,我们可以利用浏览器提供的 download 和 Blob API 来实现。具体的步骤如下: 创建一个 Blob 对象,存储文件的内容。我们可以使用 new Blob() 方法来创建一个 Blob 实例。通常我们需要将要导出的内容以字符串形式传递给 Blob …

    Vue 2023年5月27日
    00
  • 解决vue字符串换行问题(绝对管用)

    下面是解决Vue字符串换行问题的完整攻略: 问题描述 在Vue中,我们经常需要根据模板动态生成字符串。当字符串中需要包含多个换行符时,可以使用\n或者<br>来实现。但是如果我们将这个字符串直接放在模板中时,会发现换行符并没有起作用,而是直接输出了\n或者<br>这些字符。因此,我们需要一种方法来解决这个问题。 解决方案 在Vue中,…

    Vue 2023年5月27日
    00
  • vue.js实现仿原生ios时间选择组件实例代码

    下面就是“vue.js实现仿原生ios时间选择组件实例代码”的完整攻略。 一、需求分析 首先,我们需要明确该时间选择组件的需求。该组件应该具有以下几个特点: 类似原生 iOS 的时间选择器的样式; 可以选择小时、分钟; 通过点击取消和确认按钮,可以改变选择的时间; 可以通过外部传入初始时间; 选择时间后,应该将选择的时间通过事件回传给外部。 二、实现思路 经…

    Vue 2023年5月29日
    00
  • 关于element ui的菜单default-active默认选中的问题

    关于element ui的菜单default-active默认选中的问题: 1. 理解 default-active 属性 default-active 属性是 Element UI 中菜单组件 el-menu 的一个选项,作用是设置菜单默认选中的项。使用该属性时,只需将需要默认选中的菜单项的 index 值设置给 default-active 即可。 例如…

    Vue 2023年5月28日
    00
  • javascript使用substring实现的展开与收缩文字功能示例

    下面是详细讲解JavaScript使用substring实现的展开与收缩文字功能的完整攻略。 什么是“展开与收缩文字功能”? “展开与收缩文字功能”指的是一个常见的交互效果,即当页面上某一段文字过长时,可以利用JavaScript代码将其缩短并用一个“展开”按钮控制显示全部内容或隐藏部分内容。这种效果通常用于提升页面的读取体验,避免过多文字占据页面空间。 使…

    Vue 2023年5月28日
    00
  • Vue组件选项props实例详解

    Vue组件选项props实例详解 Vue.js是一款流行的前端框架,它允许使用者以组件为基础,将页面拆分为多个小组件。通过props选项,父组件可以向子组件传递数据。本文将对Vue组件选项props进行详细讲解。 props选项简介 组件选项props用于定义组件的数据类型和数据校验规则。一个组件可以拥有多个props选项,并且每个props具有以下属性: …

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