Vue 中生命周期定义及流程

yizhihongxing

Vue 中的生命周期是指 Vue 实例从创建、运行、更新、销毁等一系列事件的过程。在 Vue 实例的生命周期中,Vue 提供了一系列的钩子函数在用户自定义的 JavaScript 代码中执行,可以进行一系列的业务逻辑处理。

Vue 的生命周期分为八个阶段:

  1. beforeCreate (创建前)
  2. created (已创建)
  3. beforeMount(安装前)
  4. mounted (已安装)
  5. beforeUpdate(更新前)
  6. updated (已更新)
  7. beforeDestroy(销毁前)
  8. destroyed (已销毁)

Vue 生命周期的流程如下:

创建前(beforeCreate)-> 已创建(created)-> 安装前(beforeMount)-> 已安装(mounted)-> 更新前(beforeUpdate)-> 已更新(updated)-> 销毁前(beforeDestroy)-> 已销毁(destroyed)

下面我们逐个介绍这些生命周期钩子的作用及用法。

  1. beforeCreate(创建前)

在实例初始化之后,数据观测和事件配置之前被调用。在这个状态下,Vue 实例的标志符、事件和观测的数据都还没有初始化完成。在此阶段可以设置一些默认值或统计初始数据。

示例:

<template>
  <p>{{ message }}</p>
</template>

<script>
export default {
  data () {
    return {
      message: ''
    }
  },
  beforeCreate() {
    console.log('beforeCreate')
    this.message = 'Hello, World!'
  }
}
</script>
  1. created(已创建)

在 Vue 实例被创建之后,数据观测和事件配置已经完成,但是还没有开始 DOM 编译渲染。在这个状态下,Vue 实例已经完成数据观测和编译模板。在此阶段我们可以访问模板和实例的数据,进行网络请求或初始化操作。

示例:

<template>
  <p>{{ message }}</p>
</template>

<script>
export default {
  data () {
    return {
      message: ''
    }
  },
  created() {
    console.log('created')
    fetch('http://xxx.com')
      .then(response => response.json())
      .then(data => {
        this.message = data.message
      })
  }
}
</script>
  1. beforeMount(安装前)

在 Vue 实例被挂载到页面之前,完成了模板编译,但是没有进行 DOM 对象的生成和插入。在此阶段可以完成一些需要在页面渲染之前的操作,比如控制台打印一些有用信息或者在渲染之前处理一些数据。

示例:

<template>
  <p>{{ message }}</p>
</template>

<script>
export default {
  data () {
    return {
      message: ''
    }
  },
  beforeMount() {
    console.log('beforeMount')
    this.message = 'Hello, World!'
  }
}
</script>
  1. mounted(已安装)

在 Vue 实例被挂载到页面后,完成了 DOM 对象的生成和插入。在此阶段可以访问到页面上的 DOM 对象、绑定一些事件和进行一些后续操作,比如使用第三方库对页面进行拓展。

示例:

<template>
  <p ref="message">{{ message }}</p>
</template>

<script>
import $ from 'jquery'

export default {
  data () {
    return {
      message: ''
    }
  },
  mounted() {
    console.log('mounted')
    $('#app').css({background: '#F5F5F5'})
    this.$refs.message.style.color = 'blue'
  }
}
</script>
  1. beforeUpdate(更新前)

在数据更新时执行,在执行此函数前,虚拟 DOM 已经更新完毕,但是浏览器的 DOM 并没有更新。在此阶段,可以进行一些数据更新前的操作,比如保留上一次数据的值、获取新的数据信息等。

示例:

<template>
  <p>{{ message }}</p>
  <button @click="changeMsg">Change Message</button>
</template>

<script>
export default {
  data () {
    return {
      message: ''
    }
  },
  created() {
    console.log('created')
    this.message = 'Hello, World!'
  },
  beforeUpdate() {
    console.log('beforeUpdate')
    console.log('Old message:', this.message)
  },
  methods: {
    changeMsg() {
      this.message = 'Hello, Vue!'
    }
  }
}
</script>
  1. updated(已更新)

在数据更新时执行,此时 DOM 对象已经被重新渲染,数据已经被更新到新的值。在此阶段可以进行一些数据更新后的操作,比如修改或清除 DOM 数据。

示例:

<template>
  <p>{{ message }}</p>
  <button @click="changeMsg">Change Message</button>
</template>

<script>
export default {
  data () {
    return {
      message: ''
    }
  },
  created() {
    console.log('created')
    this.message = 'Hello, World!'
  },
  updated() {
    console.log('updated')
    console.log('New message:', this.message)
  },
  methods: {
    changeMsg() {
      this.message = 'Hello, Vue!'
    }
  }
}
</script>
  1. beforeDestroy(销毁前)

在 Vue 实例被销毁之前执行,可以在此完成一些善后工作,比如清除定时器、清除订阅事件、界面元素清理等操作。

示例:

<template>
  <p>{{ message }}</p>
  <button @click="destroy">Destroy</button>
</template>

<script>
export default {
  data () {
    return {
      message: ''
    }
  },
  created() {
    console.log('created')
    this.message = 'Hello, World!'
  },
  beforeDestroy() {
    console.log('beforeDestroy')
    clearInterval(this.timer)
  },
  methods: {
    destroy() {
      this.$destroy()
    }
  }
}
</script>
  1. destroyed(已销毁)

在 Vue 实例被销毁后执行,此时 Vue 实例中的事件、数据等资源均已销毁。在此阶段可以进行一些内存管理上的操作。

示例:

<template>
  <p>{{ message }}</p>
  <button @click="destroy">Destroy</button>
</template>

<script>
export default {
  data () {
    return {
      message: ''
    }
  },
  created() {
    console.log('created')
    this.message = 'Hello, World!'
  },
  destroyed() {
    console.log('destroyed')
  },
  methods: {
    destroy() {
      this.$destroy()
    }
  }
}
</script>

以上就是 Vue 生命周期的完整攻略,我们可以根据实际需求灵活使用生命周期,从而更好地管理 Vue 组件的生命周期。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue 中生命周期定义及流程 - Python技术站

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

相关文章

  • vue+iview实现文件上传

    下面是详细讲解”vue+iview实现文件上传”的完整攻略: 准备工作 在项目中安装vue和iview npm install vue iview –save 在main.js中引入vue和iview,并配置相关的组件 import Vue from ‘vue’ import iView from ‘iview’ import ‘iview/dist/st…

    Vue 2023年5月28日
    00
  • vue-element-admin项目导入和导出的实现

    下面我将详细讲解 “vue-element-admin项目导入和导出的实现” 的完整攻略,包括具体的过程和示例说明。 1. 导出实现 1.1 安装引入文件 首先,在项目中引入 FileSaver.js 和 XLSX.js 两个文件,它们分别用于文件保存和 Excel 文件处理。 在终端中输入以下命令: npm install file-saver xlsx …

    Vue 2023年5月27日
    00
  • 如何测量vue应用运行时的性能

    下面就为大家介绍如何测量Vue应用运行时的性能。 1.为什么测量Vue应用的性能 在开发Vue应用时,为了确保用户体验和性能,需要对应用进行性能优化。因此,我们需要知道如何测量Vue应用的性能,以便确定何时需要进行优化。 2.测量方式 2.1 使用Vue开发者工具 Vue开发者工具是一个非常强大的Chrome扩展程序,可以帮助我们更好地调试和优化Vue应用。…

    Vue 2023年5月27日
    00
  • VUE中$refs的基本用法举例

    接下来将为您详细讲解“VUE中$refs的基本用法举例”的完整攻略。 简介 在Vue中,$refs 指令用于获取子组件或子 dom 元素的引用。通过$refs指令,可以获取组件或元素的所有属性和方法,实现父子组件之间的通信。 基本用法 在使用Vue中的$refs指令时,通常需要在组件或dom元素上设置ref属性,这样在,就可以在父组件中使用$refs访问到子…

    Vue 2023年5月27日
    00
  • Vue.js每天必学之内部响应式原理探究

    Vue.js每天必学之内部响应式原理探究 前言 Vue.js是一款前端框架,拥有许多优秀的特性,如组件化、响应式等,其中响应式即是Vue.js最为核心的部分之一。本文主要讲解Vue.js的响应式原理、数据双向绑定、getter与setter等内容。 Vue.js响应式原理 Vue.js的响应式原理包含以下步骤:1. 创建一个Vue实例。2. 在Vue实例中设…

    Vue 2023年5月28日
    00
  • Vue 组件组织结构及组件注册详情

    Vue 组件是 Vue.js 中非常重要的一部分,它能够帮助我们将一个大型的项目模块化分解,使得代码更易于维护和扩展。本篇攻略将详细讲解Vue 组件的组织结构和组件注册的方法,希望能够帮助你更好地理解 Vue 组件。 组件组织结构 Vue 组件的组织结构一般如下图所示: ├── App.vue ├── types.d.ts ├── components │ …

    Vue 2023年5月28日
    00
  • Vue filter 过滤当前时间 实现实时更新效果

    Vue中可以通过过滤器(Filter)来对模板中的数据进行格式化处理。本文将介绍如何使用Vue filter来过滤当前时间,并实现实时更新效果的方法。 添加全局过滤器 首先我们需要在Vue实例中添加全局过滤器。在Vue中,可以通过 Vue.filter() 方法来添加全局过滤器。下面是一个简单的例子,这个过滤器会将传入的字符串全部转换为大写: Vue.fil…

    Vue 2023年5月29日
    00
  • vue实现折线图 可按时间查询

    关于“vue实现折线图 可按时间查询”的过程,我可以提供以下完整攻略: 步骤一:准备数据 首先,我们需要准备一组数据来作为折线图的展示依据。可以使用Mock.js模拟数据,例如: { "result": [ { "date": "2022-01-01", "value": 10 …

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