Vue生命周期区别详解

首先,需要了解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日

相关文章

  • Vue3组件间的通信方式详解

    Vue3组件间的通信方式详解 Vue3是一款强大的前端开发框架,它的组件化开发模式使得组件间通信成为必不可少的一部分。Vue3支持多种组件间通信方式,以满足不同场景下的需求。本文将详细讲解Vue3组件间的通信方式。 Props Props是父组件向子组件传递数据的一种方式。在父组件中使用子组件时,通过在子组件上添加属性来向子组件传递数据。在子组件中通过pro…

    Vue 2023年5月27日
    00
  • vue filter的四种用法小结

    下面是“Vue Filter的四种用法小结”的详细讲解。 什么是Vue Filter? Vue Filter是Vue.js中提供的一种数据过滤器(Data Filter)。它可以通过对数据进行转换和过滤来得到符合需求的数据。Filter可以在模板中使用,也可以在JavaScript代码中使用。 Vue Filter的四种用法 全局Filter 全局Filte…

    Vue 2023年5月28日
    00
  • Vue中$set()的使用方法场景分析

    我来为您详细讲解“Vue中$set()的使用方法场景分析”。 什么是Vue中的$set()? 在Vue中使用双向绑定时,当我们修改数据时,Vue会自动更新页面中的数据,这个过程是响应式的过程。但是,有时候我们需要修改由于JavaScript对象的限制而不能随意添加或修改的数据,例如数组或者对象。这时,我们需要使用Vue提供的$set()方法来触发响应式更新。…

    Vue 2023年5月29日
    00
  • vue-cli配置文件——config篇

    下面是关于“vue-cli配置文件——config篇”的完整攻略: 1. 概述 在使用Vue-cli构建Vue项目时,除了基础配置文件(如 package.json、index.html、main.js等),还有一些高级配置文件。其中,config目录下的配置文件是一些开发、打包、运行时的配置信息集合。 2. 细节 2.1 index.js index.js…

    Vue 2023年5月28日
    00
  • 一文带你了解vue3.0响应式

    一文带你了解Vue3.0响应式 Vue 3.0是当前最新版本的Vue框架,它提供了更快速的性能和更好的可维护性,其中最引人注目的改进之一是对响应式系统的改进。Vue 3.0中的响应式系统被重新设计,会给开发者带来全新的开发体验。本文将为你详细介绍Vue 3.0的响应式系统,包括如何创建响应式数据、如何在应用程序中使用响应式数据、以及Vue 3.0中新增的一些…

    Vue 2023年5月27日
    00
  • vue再次进入页面不会再次调用接口请求问题

    Vue再次进入页面不会再次调用接口请求问题,主要是因为Vue实现了单页应用(SPA)的机制,它使用了Vue-router来处理路由,当我们切换路由时,Vue-router只会切换组件,而不会重新请求数据。下面是详细的解释和攻略过程。 1. Vue-router实现SPA Vue使用Vue-router来实现路由,Vue-router是Vue.js官方的路由管…

    Vue 2023年5月28日
    00
  • mqtt.js 无法连接/错误提示 WebSocket connection to ‘ws://xxxxx‘ failed:的解决方法

    首先,需要了解一下MQTT协议和mqtt.js库。MQTT是一种用于物联网的轻量级协议,基于发布/订阅模式,支持良好的可靠性和低带宽消耗。而mqtt.js是MQTT协议的JavaScript客户端库,可以用于浏览器和Node.js环境下。 当在使用mqtt.js连接MQTT服务器时,出现“WebSocket connection to ‘ws://xxxxx…

    Vue 2023年5月28日
    00
  • 深入理解vue.js中$watch的oldvalue与newValue

    深入理解vue.js中$watch的oldValue与newValue 在Vue.js中,$watch是一个非常核心的API,经常用来监听数据的变化。$watch的主要用法如下: watch: { ‘data.field'(newVal, oldVal) { // 当 data.field 发生变化时触发该回调函数,newVal 表示变化后的值,oldVal…

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