一文搞懂Vue八大生命周期钩子函数

一文搞懂Vue八大生命周期钩子函数

Vue组件的生命周期分为8个阶段,每个阶段都有对应的钩子函数,这些钩子函数可以让我们在组件的不同生命周期阶段做出相应的操作。以下是八大生命周期钩子函数:

1. beforeCreate

在实例化Vue对象之前,会先执行beforeCreate钩子函数。在这个阶段,实例的属性、方法等都没有被初始化,因此在这个钩子函数中不能访问到data、methods、props等数据,但可以访问到Vue实例上的一些属性和方法,比如$el、$data等。

new Vue({
  beforeCreate() {
    console.log('beforeCreate')
  }
})

2. created

在实例化Vue对象之后,会执行created钩子函数。在这个阶段,实例的属性、方法等已经被初始化完成,但是还未挂载到DOM上,因此在这个钩子函数中不能访问到DOM节点,但是可以访问到data、methods、props等数据。

new Vue({
  created() {
    console.log('created')
  }
})

3. beforeMount

在挂载Vue实例到DOM之前,会先执行beforeMount钩子函数。在这个阶段,Vue实例已经完成了数据的编译和渲染,但是还未挂载到DOM上。

new Vue({
  beforeMount() {
    console.log('beforeMount')
  }
})

4. mounted

在Vue实例挂载到DOM之后,会执行mounted钩子函数。在这个阶段,Vue实例已经挂载到DOM上,因此可以访问到DOM节点,也可以进行一些DOM操作。

new Vue({
  mounted() {
    console.log('mounted')
  }
})

5. beforeUpdate

当数据发生变化且需要更新到DOM时,会先执行beforeUpdate钩子函数。在这个阶段,Vue实例已经完成了数据的更新,但尚未重新渲染DOM,因此可以在此修改数据。

new Vue({
  beforeUpdate() {
    console.log('beforeUpdate')
  }
})

6. updated

当数据发生变化且已经更新到DOM时,会执行updated钩子函数。在这个阶段,Vue实例已经完成了数据的更新,也已经重新渲染了DOM,因此可以访问到更新后的DOM节点。

new Vue({
  updated() {
    console.log('updated')
  }
})

7. beforeDestroy

在Vue实例销毁之前,会先执行beforeDestroy钩子函数。在这个阶段,Vue实例依然可以访问到data、methods、props等数据和DOM节点,也可以进行一些销毁前的操作。

new Vue({
  beforeDestroy() {
    console.log('beforeDestroy')
  }
})

8. destroyed

在Vue实例销毁之后,会执行destroyed钩子函数。在这个阶段,Vue实例已经被销毁,因此不能再访问到Vue实例上的数据和方法,也不能进行DOM操作。

new Vue({
  destroyed() {
    console.log('destroyed')
  }
})

以上是Vue八大生命周期钩子函数的详解,需要注意的是,在使用Vue进行开发时,合理地利用这些钩子函数可以使我们更好地控制组件的生命周期和行为。

示例1:

下面是一个使用Vue生命周期钩子实现轮播图的示例代码。

<template>
  <div class="slider">
    <div class="slider-content" ref="slider">
      <div class="slider-item" v-for="(item, index) in list" :key="index">
        <img :src="item.src" alt="">
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      list: [
        {src: 'img1.png'},
        {src: 'img2.png'},
        {src: 'img3.png'}
      ],
      timer: null,
      currentIndex: 0
    }
  },
  mounted() {
    this.start()
  },
  methods: {
    start() {
      this.timer = setInterval(() => {
        this.currentIndex++
        if (this.currentIndex >= this.list.length) {
          this.currentIndex = 0
        }
        this.$refs.slider.style.transform = 'translateX(-' + this.currentIndex * 100 + '%)'
      }, 2000)
    }
  },
  beforeDestroy() {
    clearInterval(this.timer)
  }
}
</script>

示例2:

下面是一个使用Vue生命周期钩子实现登录鉴权的示例代码。

import Vue from 'vue'
import router from './router'
import store from './store'

router.beforeEach((to, from, next) => {
  const token = store.state.token
  if (to.meta.requireAuth && !token) {
    next({
      path: '/login',
      query: {redirect: to.fullPath}
    })
  } else {
    next()
  }
})

new Vue({
  router,
  store,
  beforeCreate() {
    store.dispatch('getUserInfo')
  }
}).$mount('#app')

上述代码中,beforeCreate钩子函数用于在Vue实例创建之前,从后端获取用户信息,store.dispatch()用于提交一个action,获取用户信息并保存到Vuex中。router.beforeEach()用于全局路由鉴权,判断用户是否已登录,如果没有登录则跳转到登录页。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一文搞懂Vue八大生命周期钩子函数 - Python技术站

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

相关文章

  • Vue的列表之渲染,排序,过滤详解

    Vue的列表之渲染,排序,过滤详解 在Vue中,渲染、排序、过滤列表是非常常见的需求。Vue提供了强大的指令和方法来实现这些需求,下面将分别进行详细介绍。 列表渲染 Vue中通过v-for指令可以很容易地渲染数组或对象列表。下面是一个v-for指令的示例: <ul> <li v-for="item in items"&g…

    Vue 2023年5月28日
    00
  • vue.js中关于点击事件方法的使用(click)

    关于 Vue.js 中 click 事件的使用方法,可以通过以下几个步骤来进行实现: 步骤一:在 Vue 组件中定义 click 事件方法 在 Vue 组件中,可以通过定义 methods 属性来添加事件处理方法,其中可以包含一系列的方法,包括 Vue 中的 click 事件: <template> <div> <button …

    Vue 2023年5月28日
    00
  • 分享一个基于Ace的Markdown编辑器

    请看下面的完整攻略: 分享一个基于Ace的Markdown编辑器 步骤1:下载并引入Ace编辑器 Ace是一个通用的代码编辑器,我们可以在官方网站下载最新版本的Ace。在下载后,我们需要将其引入我们的HTML文件中。 <!– 引入相关CSS文件 –> <link rel="stylesheet" href=&quot…

    Vue 2023年5月28日
    00
  • 学习Vue框架中必掌握的重点知识

    学习Vue框架中必掌握的重点知识 组件基础 Vue的组件是Vue应用的基本模块。组件是可复用的,Vue应用将一个页面划分为多个组件并组成组件树。组件是拥有自己的状态和生命周期的可复用模块。了解组件的定义、注册、渲染以及组件之间的通信是掌握Vue的关键。 组件的定义和注册 组件的定义是通过Vue.extend()和Vue.component()方法来实现的。V…

    Vue 2023年5月28日
    00
  • vue3.x源码剖析之数据响应式的深入讲解

    Vue3.x源码剖析之数据响应式的深入讲解 简介 本文将深入讲解Vue3.x响应式原理,包含以下内容: 什么是响应式 Vue2.x的响应式实现 Vue3.x的响应式实现 Vue3.x的响应式能力扩展 什么是响应式 简单来说,响应式是指当某个数据发生变化时,相关的代码会自动触发更新,以保证用户界面与数据的同步。 在前端开发中,响应式是非常重要的概念。Vue就是…

    Vue 2023年5月28日
    00
  • Vue项目全局配置页面缓存之按需读取缓存的实现详解

    Vue项目全局配置页面缓存之按需读取缓存的实现详解 在Vue项目中,为了提高页面访问速度和用户体验,我们通常需要考虑使用缓存机制。在这篇文章中,我们将讲解如何在Vue项目中使用页面缓存,并实现按需读取缓存的功能。 全局路由配置 Vue项目中,可以使用Vue Router来管理路由。全局路由配置可以在项目的router目录下的index.js文件中进行配置。 …

    Vue 2023年5月28日
    00
  • vue实现动态数据绑定

    Vue.js 是一个 MVVM 框架,其中最核心的特性就是数据绑定,这是 Vue.js 区别与其他 JavaScript 框架的最重要的特点之一,本文将介绍 Vue.js 实现动态数据绑定的完整攻略。 1. 基本概念介绍 Vue.js 中有三个最核心的概念:数据、模板和渲染器。其中,数据就是我们的数据模型,用来存储应用程序中的数据;模板则用于描述数据如何被展…

    Vue 2023年5月28日
    00
  • Vue3从0搭建Vite打包组件库使用详解

    下面我将详细讲解“Vue3从0搭建Vite打包组件库使用详解”的完整攻略。 如何搭建 步骤一:安装Vue CLI 首先安装 Vue CLI。打开终端并运行以下命令: npm install -g @vue/cli 步骤二:创建Vue项目 生成一个新的Vue项目,安装 Vue Router 和 Vuex。进入项目路径,执行以下命令: vue create my…

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