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.js允许我们使用自定义事件来在组件之间传递数据。自定义事件需要发出方在适当的时候触发事件,接收方在实例中监听对应的事件。Vue.js给我们提供了$emit和$on方法来实现自定义事件。 自定义事件的分发可以使用一般的事件模型,也可以使用特殊的$emit方法来进行分发,让每个组件都有机会响应这个事件。 实现自定义事件 V…

    Vue 2023年5月29日
    00
  • 详解vue-cli下ESlint 配置说明

    下面我将为你提供详细的“详解vue-cli下ESlint 配置说明”的攻略。 1. 前言 ESLint 是一个可以帮助我们约束代码风格的工具,Vue CLI 集成了 ESLint,我们可以直接在 Vue 项目里进行代码风格检查。如果要通过 ESLint 实现代码的自动修复功能,需要借助于 Prettier 这个代码格式化工具。 2. ESLint 配置文件 …

    Vue 2023年5月28日
    00
  • vue网络请求方案原生网络请求和js网络请求库

    下面我将为你详细讲解vue网络请求方案中的原生网络请求和js网络请求库。 原生网络请求 vue中的原生网络请求可以使用axios或者fetch等方法。 axios axios是一个基于Promise的HTTP客户端,可以用在浏览器和node.js中。它有以下特征: 从浏览器中创建XMLHttpRequests; 从node.js中创建http请求; 支持Pr…

    Vue 2023年5月28日
    00
  • Vue3 composition API实现逻辑复用的方法

    当我们使用Vue3进行开发时,使用Vue Composition API可以极大地提升我们的开发效率。这里详细介绍了如何使用Vue3 Composition API实现逻辑复用的方法。 什么是Vue3 Composition API Vue3 Composition API是一种新的、基于函数的API,它可以让我们更灵活地组织我们的逻辑代码,提高代码的可读性…

    Vue 2023年5月28日
    00
  • 浅谈在vue-cli3项目中解决动态引入图片img404的问题

    首先,出现图片404错误的原因可能有多种,但在vue-cli3项目中常见的错误是因为在引入图片时直接使用了相对路径而导致的。 解决这个问题的方法是使用require语法,在vue组件中通过require引入图片文件,再通过绑定v-bind:src动态绑定图片的路径,即可避免出现404错误。 具体的步骤如下: 下载并安装file-loader 在项目中使用re…

    Vue 2023年5月28日
    00
  • Vue3属性绑定方法解析

    Vue3属性绑定方法解析 Vue3提供了更加优雅的属性绑定方法,让属性绑定更加简单灵活。本篇文章将会详细讲解Vue3属性绑定的方法。 描述 在Vue3中,你可以直接使用 v-bind: 或 : 来进行属性绑定,语法和Vue2中的一样。但是,Vue3还提供了另一种方式,使用 : 来替代 v-bind: 。即:将 v-bind: 缩写为 : ,这使得Vue3的属…

    Vue 2023年5月28日
    00
  • Vue编程三部曲之将template编译成AST示例详解

    下面我将详细讲解“Vue编程三部曲之将template编译成AST示例详解”的完整攻略。 1. 什么是AST AST(Abstract Syntax Tree),即抽象语法树,是一种计算机科学中的树状数据结构。在编译原理中,AST是源代码的抽象语法结构的树状表现形式。它生成于解析阶段,通常由解析器创建,并被用作后续编译的基础。 2. 将template编译成…

    Vue 2023年5月27日
    00
  • vue中,在本地缓存中读写数据的方法

    在 Vue 中,在本地缓存中读写数据可以使用 HTML5 中提供的 localStorage 和 sessionStorage两种方式。下面将详细讲解这两种方式的使用方法。 localStorage localStorage 提供了一种比 Cookie 更优秀的存储方式,存储的数据大小限制为 5MB 左右。下面是从本地缓存中读写数据的示例代码: // 写入数…

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