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日

相关文章

  • Vue实现添加数据到二维数组并显示

    针对“Vue实现添加数据到二维数组并显示”的问题,我可以提供以下完整攻略: 步骤一:创建Vue实例 首先,我们需要创建Vue实例并定义数据。这里我提供一个简单的示例: <div id="app"> <button @click="addData">添加数据</button> <…

    Vue 2023年5月28日
    00
  • Vue-pdf实现在线预览PDF文件

    下面我将为你详细讲解使用 Vue-pdf 实现在线预览 PDF 文件的完整攻略。攻略分为以下几个步骤: 安装 Vue-pdf 引入 Vue-pdf 组件 在项目中使用 Vue-pdf 组件 示例1:使用静态 PDF 文件 示例2:使用动态加载的 PDF 文件 下面我会一步一步地给你讲解。 1. 安装 Vue-pdf 首先,需要安装 Vue-pdf。在终端中输…

    Vue 2023年5月28日
    00
  • Vue时间轴 vue-light-timeline的用法说明

    Vue时间轴 vue-light-timeline的用法说明 什么是Vue时间轴 vue-light-timeline Vue时间轴 vue-light-timeline是一个基于Vue.js的时间轴组件库,简单易用且高度自定义。 安装 使用npm命令进行安装: npm install vue-light-timeline –save 如何使用 引入 在V…

    Vue 2023年5月28日
    00
  • 原生JS实现的自动轮播图功能详解

    “原生JS实现的自动轮播图功能详解”可以通过以下步骤实现: 1. 创建轮播图的html结构 在HTML文件中创建轮播图的结构,并给每一张图片设置一个唯一的编号作为id,以便在JS中引用。 例如,创建一个将包括5张照片的轮播器,结构如下: <div class="slider"> <img id="slide1&…

    Vue 2023年5月28日
    00
  • Vue监听一个数组id是否与另一个数组id相同的方法

    要监听一个数组中对象的属性,需要用到 Vue 中提供的 $watch 或 $watchCollection 方法。具体实现步骤如下: 在数据中定义两个数组,分别为 idArray 和 targetArray,如下代码所示: data() { return { idArray: [1, 2, 3], targetArray: [{id: 1, name: ‘T…

    Vue 2023年5月29日
    00
  • Vue中的循环及修改差值表达式的方法

    下面我会详细讲解Vue中循环及修改差值表达式的方法的完整攻略。 循环列表 在Vue中,我们可以使用v-for指令来遍历数组或对象,并渲染出每一个元素。下面是一个简单的例子,展示了如何通过v-for指令来循环遍历数组并渲染每一个元素。 <template> <div> <h2>循环列表</h2> <ul&g…

    Vue 2023年5月29日
    00
  • vue关于重置表单数据出现undefined的解决

    关于重置表单数据出现undefined的问题,我们可以进行如下的解决方式: 问题原因 首先,我们需要明确这个问题的原因。在 Vue 中,我们重置表单数据通常使用 Object.assign 或者展开操作符 … 来将一个空对象里的数据覆盖当前表单组件里的数据。常见代码如下: // resetFormData 方法里重置formData数据 resetFor…

    Vue 2023年5月27日
    00
  • 自定义vue组件发布到npm的方法

    首先,创建一个Vue组件库需要进行如下几个步骤: 步骤一:创建Vue组件项目 使用Vue CLI创建一个新的Vue项目: # 全局安装 Vue CLI npm install -g @vue/cli # 创建一个Vue项目 vue create my-vue-components 之后按照提示选择预设项目配置即可。 步骤二:编写Vue组件 在src/comp…

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