Vue生命周期详解

Vue生命周期详解

Vue.js 是一个 MVVM 框架,在组件渲染过程中,每个组件都有自己的生命周期。这里将详细介绍 Vue 组件的生命周期函数。

Vue 组件生命周期可以分为四个阶段:

  1. 创建阶段 create
  2. 挂载阶段 mount
  3. 更新阶段 update
  4. 销毁阶段 destroy

创建阶段 create

在创建阶段,Vue 组件将从组件配置对象的初始化属性中读取数据并设置组件状态。这个阶段中的钩子函数为 beforeCreatecreated

示例代码:

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

<script>
export default {
  data() {
    return {
      message: 'Hello, Vue!'
    }
  },
  beforeCreate() {
    console.log('beforeCreate:', this.message) // undefined
  },
  created() {
    console.log('created:', this.message) // 'Hello, Vue!'
  },
}
</script>

beforeCreate 钩子函数中,组件实例中的 data 数据对象还没有被初始化,在这个阶段无法访问到 data 中的数据。而在 created 钩子函数中,data 数据对象已经初始化完成并且可以被访问。

挂载阶段 mount

挂载阶段是当组件被添加到页面时的阶段,它只会被执行一次。这个阶段的钩子函数是 beforeMountmounted

示例代码:

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

<script>
export default {
  data() {
    return {
      message: 'Hello, Vue!'
    }
  },
  beforeMount() {
    console.log('beforeMount') // beforeMount
  },
  mounted() {
    console.log('mounted') // mounted
  },
}
</script>

beforeMount 钩子函数中,组件的模板还没有被渲染出来,在这个阶段无法访问组件的 DOM 节点。而在 mounted 钩子函数中,组件的模板已经渲染出来,可以访问组件的 DOM 节点了。

更新阶段 update

更新阶段是在组件被更新时触发的阶段,每当组件的状态(props 或 data)发生变化时,都会触发这个阶段。这个阶段中的钩子函数为 beforeUpdateupdated

示例代码:

<template>
  <div> {{ message }} </div>
  <button @click="updateMessage">Update</button>
</template>

<script>
export default {
  data() {
    return {
      message: 'Hello, Vue!'
    }
  },
  methods: {
    updateMessage() {
      this.message += '!'
    },
  },
  beforeUpdate() {
    console.log('beforeUpdate:', this.message) // 'Hello, Vue!'
  },
  updated() {
    console.log('updated:', this.message) // 'Hello, Vue!!'
  },
}
</script>

beforeUpdate 钩子函数中,组件状态(props 或 data)已经被修改,但是页面上显示的还是旧的状态。而在 updated 钩子函数中,组件状态已经被更新并且页面上也已经显示了最新的状态。

销毁阶段 destroy

销毁阶段是当组件从页面中被卸载时的阶段,这个阶段的钩子函数为 beforeDestroydestroyed

示例代码:

<template>
  <div> {{ message }} </div>
  <button @click="destroy">Destroy</button>
</template>

<script>
export default {
  data() {
    return {
      message: 'Hello, Vue!'
    }
  },
  methods: {
    destroy() {
      this.$destroy()
    },
  },
  beforeDestroy() {
    console.log('beforeDestroy') // beforeDestroy
  },
  destroyed() {
    console.log('destroyed') // destroyed
  },
}
</script>

beforeDestroy 钩子函数中,组件还没有被卸载,仍然可以访问组件的 DOM 节点。而在 destroyed 钩子函数中,组件已经被卸载,无法访问组件的 DOM 节点了。

以上是 Vue 组件的生命周期函数的详细解释。在 Vue.js 开发过程中,对组件的生命周期不同阶段执行的钩子函数的理解和使用,对于增强开发中的调试、优化、性能等方面有着非常实质性的帮助。

示例1

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Example1</title>
</head>
<body>
  <div id="app">
    <div>{{ message }}</div>
    <button @click="updateMessage">Update</button>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script>
    var app = new Vue({
      el: '#app',
      data: {
        message: 'Hello, Vue!'
      },
      methods: {
        updateMessage: function () {
          this.message += '!'
        },
      },
      beforeUpdate () {
        console.log('beforeUpdate')
      },
      updated () {
        console.log('updated')
      },
    })
  </script>
</body>
</html>

当用户点击 “Update” 按钮时,页面上会显示 “Hello, Vue!!”,同时组件的状态也会更新,控制台中会分别打印出 “beforeUpdate” 和 “updated”。

示例2

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Example2</title>
</head>
<body>
  <div id="app">
    <div>{{ message }}</div>
    <button @click="destroy">Destroy</button>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script>
    var app = new Vue({
      el: '#app',
      data: {
        message: 'Hello, Vue!'
      },
      methods: {
        destroy: function () {
          this.$destroy()
        },
      },
      beforeDestroy () {
        console.log('beforeDestroy')
      },
      destroyed () {
        console.log('destroyed')
      },
    })
  </script>
</body>
</html>

当用户点击 “Destroy” 按钮时,组件会被卸载,控制台中会分别打印出 “beforeDestroy” 和 “destroyed”。

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

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

相关文章

  • vue实现记事本功能

    下面详细讲解“Vue 实现记事本功能”的完整攻略: 准备工作 在使用 Vue 实现记事本功能之前,需要先安装 Vue 和其他依赖项。可以使用 npm 或 yarn 来安装。下面是在项目中使用 npm 安装所需依赖项的命令行: npm install vue npm install vue-router npm install vuex 添加路由 在 Vue …

    Vue 2023年5月29日
    00
  • 详解给Vue2路由导航钩子和axios拦截器做个封装

    让我们来详细讲解“详解给Vue2路由导航钩子和axios拦截器做个封装”的攻略。 1. Vue2路由导航钩子封装 路由导航钩子是Vue Router 提供的一种非常有用的功能,它允许我们在路由跳转时执行一些额外的逻辑,例如验证用户是否登录、切换页面时的动画效果等。我们可以使用全局导航钩子或者单独路由的导航钩子。这里我们介绍一下全局导航钩子的封装: impor…

    Vue 2023年5月28日
    00
  • Vue简单封装axios网络请求的方法

    下面是“Vue简单封装axios网络请求的方法”的完整攻略。 1. 确认项目中axios库的使用 在使用Vue封装axios网络请求之前,需要先确认项目中是否已经引入axios库。如果没有引入,则需要在项目中安装axios: npm install axios –save 如果已经引入了axios库,则可以直接开始Vue封装axios网络请求的操作。 2.…

    Vue 2023年5月28日
    00
  • 关于vue中的时间格式转化问题

    关于Vue中的时间格式转化问题,我为你详细讲解以下攻略。 问题描述 在Vue应用开发中,我们经常会遇到需要将日期时间格式进行转化的情况。例如从后端API接口中获取的时间戳需要格式化成常用的日期时间格式,或者用户在前端输入的日期时间字符串需要转换为时间戳等。在这样的场景下,我们需要掌握Vue中时间格式转化的方法。 解决方法 Vue中内置了许多过滤器(Filte…

    Vue 2023年5月28日
    00
  • 基于vue-cli3多页面开发apicloud应用的教程详解第1/2页

    让我来为您讲解一下“基于vue-cli3多页面开发apicloud应用的教程详解第1/2页”的完整攻略。 标题 介绍 在此文档中,我们将详细讲解如何使用Vue CLI 3来开发APICloud应用。在这个过程中,我们将介绍如何创建多页面应用程序,并在其基础上使用APICloud的功能创建完整的应用程序。 前提条件 在开始本教程之前,请确保您已经熟悉Vue.j…

    Vue 2023年5月27日
    00
  • vue 如何打开接口返回的HTML文件

    当我们向服务器请求数据时,有时候会返回HTML文件,而如果要在Vue中直接显示这个HTML文件,需要经过以下步骤: 1.使用axios发送请求获取HTML文件内容 首先,需要在Vue组件中引入axios,并使用axios发送一个GET请求来获取HTML文件内容。我们可以使用axios的get方法,指定请求的URL即可。 示例代码如下: import axio…

    Vue 2023年5月27日
    00
  • vue项目中使用bpmn-自定义platter的示例代码

    下面我将详细讲解如何在Vue项目中使用BPMN自定义platter的完整攻略。 准备工作 首先,我们需要在Vue项目中安装相应的依赖项。打开终端(Terminal),进入到Vue项目的根目录下,然后执行以下命令: npm install bpmn-js bpmn-moddle bpmn-js-properties-panel 这三个依赖项分别是: bpmn-…

    Vue 2023年5月28日
    00
  • 一起写一个即插即用的Vue Loading插件实现

    下面是“一起写一个即插即用的Vue Loading插件实现”的完整攻略。 确定插件的使用方式和效果 首先要确定我们的插件要如何使用以及要实现的效果。在这个过程中,需要考虑以下几个方面: 插件的使用方式:Vue插件可以通过 Vue.use() 方法进行安装,因此我们需要确定插件的安装方式和参数。 插件的效果:我们的Vue Loading插件需要实现的效果是,在…

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