Vue生命周期区别详解

yizhihongxing

首先,需要了解Vue的生命周期是什么。Vue生命周期是Vue实例从创建到销毁的过程,在其中它会依次经过不同的状态和调用不同的钩子函数。Vue的生命周期分为8个阶段,分别是:

  1. beforeCreate: 在实例初始化之后,数据观测和初始化事件之前调用。
  2. created: 在实例创建完成后调用,此阶段完成了数据观测和属性计算,但尚未开始真正的DOM相关操作。
  3. beforeMount: 在挂载之前被调用,即在DOM元素替换之前,可以在此阶段更改实例的$el属性。
  4. mounted: 在挂载完成后调用,此时实例的DOM已经被渲染出来,可以访问到实例的DOM元素。
  5. beforeUpdate: 在组件更新之前调用,发生在虚拟DOM重新渲染和打补丁之前。
  6. updated: 组件更新完毕后调用,此时组件DOM已经完成更新。
  7. beforeDestroy: 在实例销毁之前调用,此时实例的子组件和DOM都未被销毁。
  8. destroyed: 在实例销毁之后调用,此时实例的子组件和DOM都已经被销毁。

接下来分别解释这些生命周期,并且给出相关的示例说明。

beforeCreate

beforeCreate阶段,实例已经完成了属性和方法的初始化,但是还未进入DOM相关操作,这时可以进行一些接下来会用到的配置或者初始化操作。例如下面这个示例,可以在beforeCreate阶段进行全局组件或者插件的注册:

Vue.mixin({
  created() {
    console.log('全局混入beforeCreate钩子被调用')
  }
})

new Vue({
  beforeCreate() {
    console.log('实例beforeCreate钩子被调用')
  },
  el: '#app',
  data() {
    return {
      message: 'hello world!'
    }
  }
})

created

created阶段,实例已经完成了对属性数据的监听,组件与父组件之间的事件监听和响应,这个时候可以进行比较复杂的计算和数据操作。例如下面这个示例,可以在初始化后对属性进行一些计算:

new Vue({
  created() {
    this.reversedMessage = this.message.split('').reverse().join('')
  },
  el: '#app',
  data() {
    return {
      message: 'hello world!',
      reversedMessage: ''
    }
  }
})

beforeMount

beforeMount阶段,实例已经完成了属性和方法的初始化,也已经得到了Virtual DOM,这个时候页面并没有真正的渲染出来。可以在这个阶段进行一些dom相关初始化操作。例如下面这个示例,可以修改el属性来指定实例挂载的位置:

new Vue({
  beforeMount() {
    this.$options.el = '#app';
  },
  data() {
    return {
      message: 'hello world!'
    }
  }
})

mounted

mounted阶段,对应的DOM元素已经全部渲染完成,并且实例的数据和DOM已经被挂载到了一起,此时可以进行一些操作,例如访问DOM元素或者发起异步请求。例如下面这个示例,可以在页面上完成mounted事件的绑定和解除:

new Vue({
  mounted() {
    document.addEventListener('click', this.onClick)
  },
  beforeDestroy() {
    document.removeEventListener('click', this.onClick)
  },
  methods: {
    onClick() {
      console.log('click')
    }
  }
})

beforeUpdate

beforeUpdate阶段,实例已经重新渲染了Virtual DOM,但是还没有开始打补丁,可以在这个阶段进行一些修改数据的操作。例如下面这个示例,可以在修改数据后进行一个比较耗时的操作:

new Vue({
  beforeUpdate() {
    this.$nextTick(() => {
      console.log('值被更新:' + this.message)
    })
  },
  data() {
    return {
      message: 'hello world!'
    }
  }
})

updated

updated阶段,实例已经完成了对比Virtual DOM的操作,把需要更新的地方进行了真正的DOM更新,可以进行一些后期的DOM操作,例如获取更新后的DOM信息或者发起异步请求。例如下面这个示例,可以在页面更新完成后修改input元素的值:

new Vue({
  updated() {
    this.$refs.input.value = this.message
  },
  data() {
    return {
      message: 'hello world!'
    }
  }
})

beforeDestroy

beforeDestroy阶段,可以进行实例销毁前必要的清理工作,比如关闭定时器或者移除DOM元素。例如下面这个示例中,在销毁前移除了绑定的事件监听:

new Vue({
  mounted() {
    document.addEventListener('click', this.onClick)
  },
  beforeDestroy() {
    document.removeEventListener('click', this.onClick)
  },
  methods: {
    onClick() {
      console.log('click')
    }
  }
})

destroyed

destroyed阶段,实例已经被销毁,可以释放所有跟实例有关的的资源,这个时候就可以进行一些自定义的清理操作。例如下面这个示例,在销毁前打印一行消息:

new Vue({
  destroyed() {
    console.log('Vue实例已经销毁')
  },
  data() {
    return {
      message: 'hello world!'
    }
  }
})

以上便是针对Vue生命周期的详细讲解,其中包括了各个阶段的作用和需要注意的地方,并附带了一些相关的示例说明。

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

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

相关文章

  • JS基于递归实现倒计时效果的方法

    当我们需要倒计时的效果时,JS基于递归实现倒计时就是一种很不错的方案了。接下来我将为大家讲解如何使用JS实现基于递归的倒计时效果。 步骤一:准备样式 通过CSS设置我们的倒计时样式,使页面表现更加美观。这里我们假设我们的倒计时样式类名为 countdown。 .countdown { font-size: 24px; color: #666; } 步骤二:编…

    Vue 2023年5月28日
    00
  • 关于vue2响应式缺陷的问题

    问题描述: 在Vue2中使用响应式数据,如果一个对象的属性不存在,那么对于该属性的修改并不会触发视图的更新。 解决方法: 1.使用Vue.set()方法手动触发更新 Vue.set()是Vue提供的一种修改响应式对象的方法,可以更新对象的属性并触发视图更新。使用方法如下: Vue.set(vm.someObject, ‘key’, value); 其中,vm…

    Vue 2023年5月29日
    00
  • 使用vue-cli创建vue2项目的实战步骤详解

    下面就是使用vue-cli创建vue2项目的实战步骤详解: 步骤一:安装node.js和npm 在使用vue-cli创建vue2项目之前,需要先安装node.js和npm,这里就不再赘述了,如果还没安装的话可以到node.js官网下载安装包进行安装。 步骤二:安装vue-cli 使用npm全局安装vue-cli,执行如下命令: npm install -g …

    Vue 2023年5月27日
    00
  • vue中怎么区分不同的环境

    为了区分不同环境,我们通常需要在vue项目中设置一些不同的配置项。下面是一些常用的方式和示例: 方式一:通过环境变量进行区分 我们可以通过node.js中的process.env对象获取当前运行环境的环境变量,从而判断当前是在哪个环境下。 在vue项目中,我们可以通过设置webpack的DefinePlugin插件来创建一个全局变量process.env,从…

    Vue 2023年5月28日
    00
  • spring boot读取Excel操作示例

    Spring Boot读取Excel操作示例 对于Java开发人员来说,我们通常需要读取Excel文件中的数据来进行数据处理或导入到数据库中。在Spring Boot中,我们可以使用Apache POI库来实现读取Excel文件的操作。 步骤1:添加Apache POI依赖 在pom.xml文件中添加以下依赖: <dependency> <…

    Vue 2023年5月28日
    00
  • vue中forEach循环的使用讲解

    当我们使用Vue.js来开发我们的web应用时,经常需要处理数据的遍历或是循环。在Vue.js中,我们可以通过forEach()方法来对一个数组进行循环,本文将从以下几个方面来讲解vue中forEach循环的使用方法: forEach()的基础使用方法 在Vue.js中使用forEach()进行数组循环 遍历对象时使用forEach()的注意事项 1. fo…

    Vue 2023年5月27日
    00
  • vue实现列表的添加点击

    下面是关于如何使用Vue实现列表的添加点击的完整攻略。为了使内容更加易懂,我将分为以下几个部分进行讲解: Vue组件的创建 列表的初始化 实现添加点击功能 1. Vue组件的创建 首先,我们需要在Vue中创建一个组件用于显示列表,示例代码如下: <template> <div> <ul> <li v-for=&quo…

    Vue 2023年5月29日
    00
  • vue如何使用el-table遍历循环表头和表体数据

    当我们需要在Vue项目中显示表格数据时,我们可以使用 Element UI 提供的 el-table 组件。在使用 el-table 组件时,经常会遇到需要遍历循环表头和表体数据的情况。下面是详细的步骤: 1. 安装 Element UI 首先,我们需要安装 Element UI。打开终端并运行以下命令: npm install element-ui –s…

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