Vue 中生命周期定义及流程

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中点击url下载文件的案例详解

    以下是关于“Vue中点击URL下载文件的案例详解”的完整攻略,包括两个示例说明: 1. Vue中点击URL下载文件的步骤 步骤一:后端实现文件下载接口 在后端通过开放接口供前端进行文件下载。具体实现方式依据后端开发框架、技术选型等情况而有所差异。 步骤二:前端实现文件下载 前端通过调用后端提供的文件下载接口来实现文件下载。从Vue角度看,实现文件下载主要分为…

    Vue 2023年5月28日
    00
  • Angular 与 Component store实践示例

    我来为你详细讲解“Angular与Component store实践示例”的完整攻略。首先,我们将介绍Angular和Component store的基本概念,然后,我们将覆盖两个示例说明,通过简单的例子,让你更好的了解Angular和Component store的实践。 Angular和Component store Angular是一个用于构建现代We…

    Vue 2023年5月28日
    00
  • vue下载文件以及文件重命名方式

    下面是关于 Vue 下载文件以及文件重命名方式的完整攻略。 1. 下载文件 在 Vue 中下载文件,通常需要用到 AJAX 请求和 Blob 对象的相关 API。 首先,我们需要在 Vue 组件中定义下载方法: methods: { downloadFile() { axios.get(‘http://example.com/downloads/exampl…

    Vue 2023年5月28日
    00
  • 详解从新建vue项目到引入组件Element的方法

    下面就是关于“详解从新建vue项目到引入组件Element的方法”的完整攻略: 一、新建vue项目 首先,在命令行窗口中执行以下命令,使用vue-cli创建一个新的vue项目: vue create my-project 其中,“my-project”是你想要命名的项目名称,你可以自己调整。 执行完该命令后,会提示你选择一个vue项目的配置模板,如果你是一个…

    Vue 2023年5月28日
    00
  • 详解Vue如何监测数组的变化

    详解Vue如何监测数组的变化。Vue对数组的变化是有所监测的,包括以下操作:push、pop、shift、unshift、splice、sort、reverse。下面我们对这些操作进行分析: push和pop Vue对于数组的push、pop操作,可以通过观察数组的length属性来监测数组的变化。当进行push或pop操作时,Vue会检测到数组的lengt…

    Vue 2023年5月28日
    00
  • elmentUI组件中el-date-picker限制时间范围精确到小时的方法

    下面是关于「elmentUI组件中el-date-picker限制时间范围精确到小时的方法」的详细讲解,包含了两条示例说明。 简介 el-date-picker 是 Element UI 提供的日期选择器组件,它可以帮助我们快速地构建出日期选择器。但是在实际使用中我们可能会遇到一些特殊需求,比如需要限制选取日期时间的范围,并且要精确到小时级别。本文将介绍在 …

    Vue 2023年5月29日
    00
  • Vue编译器解析compile源码解析

    Vue编译器是一个非常重要的组成部分,它的作用是将Vue组件中的template模板转化为渲染函数,以实现组件的动态渲染。本篇攻略将详细介绍Vue编译器解析compile源码的过程。 什么是compile源码? compile源码是Vue编译器的一部分,它是Vue的编译过程的核心部分。该部分主要负责将Vue组件的模板转化为渲染函数。 compile源码执行过…

    Vue 2023年5月27日
    00
  • vue中利用Promise封装jsonp并调取数据

    下面是关于“vue中利用Promise封装jsonp并调取数据”这个话题的详细讲解。 简介 在前端开发中,由于浏览器的安全策略限制,无法直接发送跨域请求。一般情况下,我们使用jsonp协议实现跨域请求。而在Vue中,我们可以通过Promise来对jsonp进行封装。 jsonp 在跨域请求中,我们经常会使用jsonp。jsonp本质上是利用script标签来…

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