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日

相关文章

  • vue3中的watch和watchEffect实例详解

    Vue3中的watch和watchEffect实例详解 在Vue3中,watch和watchEffect可以定义响应式数据的副作用。本文会详细讲解两者的区别和使用方式,并给出几个实例示例说明。 watch watch的基本用法是:当数据发生变化时执行一个函数。可以用来监听单个数据的变化,也可以监听多个数据。 监听单个数据 监听单个数据可以通过$watch函数…

    Vue 2023年5月27日
    00
  • 基于Vue2的独立构建与运行时构建的差别(详解)

    基于Vue2的独立构建与运行时构建的差别 独立构建和运行时构建的差别 Vue.js 2.0 提供了两种构建版本:完整版和运行时版本。独立构建包含 Vue 的完整版,包括编译器和反应器,可以自行编译模板并在运行时编译。而运行时构建则仅包含运行时版本,不包含编译器。使用运行时版本需要提前将为模板编译好的渲染函数传递给 Vue 实例。 运行时构建的优势在于它体积更…

    Vue 2023年5月28日
    00
  • vue + Electron 制作桌面应用的示例代码

    下面是关于“vue + Electron 制作桌面应用的示例代码”的完整攻略,主要分为以下几个步骤: 1. 创建项目 首先,确保已安装最新版本的 nodejs 和 npm。然后,在命令行工具中输入以下命令创建一个基础的 Vue.js 项目。 vue create my-desktop-app 接下来,进入项目目录并安装 Electron 和 electron…

    Vue 2023年5月27日
    00
  • 聊聊jenkins部署vue/react项目的问题

    下面我将为你详细讲解如何在Jenkins上进行Vue/React项目的部署,具体攻略如下: 环境准备 安装 Jenkins:根据所部署服务器的操作系统选择相应安装方式,安装 Jenkins 服务。 安装 Node.js:本文以 Node.js 为 JavaScript 运行环境。 安装 NPM:NPM 是 Node.js 的包管理工具,可以用它来引入项目依赖…

    Vue 2023年5月28日
    00
  • vue+jsplumb实现工作流程图的项目实践

    下面我将详细讲解一下“vue+jsplumb实现工作流程图的项目实践”的攻略步骤。 步骤一:安装vue及相关插件 第一步是安装Vue.js,可以使用npm或yarn进行安装。同时,还需要安装Vue Router和Vue Resource插件来支持我们实现跨组件通信和网络请求。 npm install vue vue-router vue-resource -…

    Vue 2023年5月28日
    00
  • 详解mpvue开发微信小程序基础知识

    详解mpvue开发微信小程序基础知识 什么是mpvue mpvue是一个基于Vue.js的小程序开发框架,可以让我们使用Vue.js的语法开发小程序,同时也能兼顾小程序的一些特殊需求。 在使用mpvue进行小程序开发时,我们可以享受到Vue.js带来的诸多便利,例如组件化、路由、数据绑定等等。 同时,mpvue也将小程序的一些独特特性进行了支持,例如原生AP…

    Vue 2023年5月27日
    00
  • 面试问题Vue双向数据绑定原理

    面试问题Vue双向数据绑定原理 前言 在Vue中,双向数据绑定是一项非常重要的特性,也是其比较独特的特性之一。理解Vue中双向数据绑定的原理,是面试Vue开发岗位的常见问题之一。本篇文章将从以下几个方面来讲解Vue双向数据绑定的原理:Vue的响应式系统、Object.defineProperty()、实现双向绑定的具体原理以及如何自定义实现双向绑定。 Vue…

    Vue 2023年5月28日
    00
  • vue3+TypeScript+vue-router的使用方法

    下面是关于”vue3+TypeScript+vue-router的使用方法”的完整攻略。 什么是Vue3,TypeScript和Vue-router? Vue3: Vue.js的最新版本,是一个用于构建用户界面的渐进式框架。它在性能、API和优化方面进行了一系列改进和优化。 TypeScript: TypeScript是一个由Microsoft开发的开源编程…

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