Vue生命周期详解

yizhihongxing

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过滤器filters的用法及时间戳转换问题

    让我来详细讲解一下“Vue过滤器filters的用法及时间戳转换问题”的完整攻略。 什么是Vue过滤器filters? Vue过滤器filters是一种在模板中使用的文本格式化工具,用于将数据转换成所需的格式,比如将文本全部转换为大写、将数字按照指定的小数位数四舍五入等等。Vue过滤器通常被放在Mustache插值的后面,由管道符号(|)连接,如下: {{ …

    Vue 2023年5月28日
    00
  • vscode配置vue下的es6规范自动格式化详解

    下面给您详细讲解“VSCode配置Vue下的ES6规范自动格式化”攻略。 1. 安装必要插件 在使用VSCode编写Vue项目时,需要安装以下插件: Vetur:Vue语法高亮及格式化 Prettier – Code formatter:代码格式化工具 ESLint:代码语法及规范检查插件 这三个插件的作用分别是:Vue语法高亮及格式化、自动代码格式化、代码…

    Vue 2023年5月28日
    00
  • vue 如何将二维数组转化为一维数组

    将二维数组转化为一维数组可以使用 Javascript 的数组方法 flat()。而在 Vue 中,可以使用计算属性来获取转换后的一维数组。 计算属性是一个用来计算 Vue 实例数据的属性,可以基于其它数据进行计算得出。在 Vue 实例中使用计算属性时,只要该计算属性所依赖的数据发生了变化,该计算属性就会重新计算。因此,我们可以使用计算属性来获取每次更新数组…

    Vue 2023年5月28日
    00
  • 详解VUE单页应用骨架屏方案

    标题:详解VUE单页应用骨架屏方案 什么是骨架屏 骨架屏即为页面骨架,通俗点来说就是一个页面还没加载完成时,所出现的一种页面展示方案。它将页面大致的结构和样式提前定义好,填充占位元素在视觉上证明了页面正在加载。而实际上用户看到的只是一个假象,等待页面正式加载完成后,占位元素会被替换成真实的内容。 骨架屏在VUE单页应用中的应用 在VUE单页应用中,页面通过异…

    Vue 2023年5月28日
    00
  • 详解vue更改头像功能实现

    让我来详细讲解一下“详解Vue更改头像功能实现”的完整攻略。 一、前置知识 在学习Vue头像更改功能之前,需要对Vue基础知识有一定的掌握,包括组件、状态管理、生命周期等等。 二、实现步骤 下面是详细的实现步骤: 第一步:安装依赖 首先需要安装依赖 element-ui 和 axios,我们可以使用以下命令进行安装: npm install element-…

    Vue 2023年5月27日
    00
  • ES6 Promise对象概念及用法实例详解

    ES6 Promise对象概念及用法实例详解 什么是Promise对象? Promise是ES6新增的一种异步编程解决方案。它将异步操作封装成一个对象,可以更直观、更优雅地表达异步操作。Promise对象的最大特点是它具备状态,分别为: Pending(进行中) Fulfilled(已成功) Rejected(已失败) 即一旦Promise对象的状态发生改变…

    Vue 2023年5月28日
    00
  • vue 绑定使用 touchstart touchmove touchend解析

    下面是针对“Vue 绑定使用 touchstart touchmove touchend 解析”的解析攻略: 1. 什么是 touch 事件? Touch 事件是指通过触摸用户界面产生的事件,分为三个部分:touchstart、touchmove、touchend。通常用于移动设备上。 2. Vue 绑定 Touch 事件 在 Vue 实例上,可以通过 @t…

    Vue 2023年5月28日
    00
  • vue中改变了vuex数据视图不更新,也监听不到的原因及解决

    在vue中使用vuex进行数据管理时,有时候会出现改变了vuex数据,但是页面视图并没有更新,也没有触发相应的监听事件的情况。这通常是因为没有正确地使用Vue的响应式机制和Vuex的状态更新机制引起的。 以下是解决这个问题的攻略,包含两个示例说明。 1. 使用Vue的响应式机制 在Vue中,只有通过Vue提供的响应式方法或函数才能保证更新视图。通过JavaS…

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