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

yizhihongxing

一文搞懂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日

相关文章

  • vue3无法使用jsx的问题及解决

    让我们来详细讲解一下“Vue3无法使用JSX的问题及解决”的攻略。 问题描述 在Vue2中,由于Vue默认使用的模板语言是HTML-Based的,因此不支持JSX,这意味着在Vue2中我们无法直接使用JSX编写组件。 在Vue3中,Vue团队引入了一个新的API——createRenderer()。这个API以渲染器为基础,为Vue提供了更灵活的渲染方式。 …

    Vue 2023年5月28日
    00
  • idea以任意顺序debug多线程程序的具体用法

    IDEA是一款强大的Java开发工具,提供了丰富的调试功能,包括任意顺序debug多线程程序。下面是具体的操作攻略: 步骤一:在IDEA中打开多线程程序 首先,在IDEA中打开多线程程序代码,并确保已经配置好了程序的运行环境。 步骤二:设置断点 在需要调试的代码行上设置断点。可以单击代码行左侧的区域,或者在代码行上右键单击,在菜单中选择”Toggle Lin…

    Vue 2023年5月28日
    00
  • Spring Boot集成Shiro实现动态加载权限的完整步骤

    下面我将为您详细讲解Spring Boot集成Shiro实现动态加载权限的完整步骤。 一、引入依赖 在Spring Boot项目中,需要引入以下依赖: <!– shiro依赖 –> <dependency> <groupId>org.apache.shiro</groupId> <artifactId…

    Vue 2023年5月28日
    00
  • VUEJS实战之修复错误并且美化时间(2)

    让我来为您详细讲解一下“VUEJS实战之修复错误并且美化时间(2)”的完整攻略。 1. 简介 本文是继“VUEJS实战之修复错误并且美化时间(1)”之后,对于时间美化功能的扩展。在上一篇文章中,我们已经完成了将时间戳转换为固定格式的日期字符串。但是,我们发现显示出来的时间还是不够美观,需要进行美化。 2. 时间美化 在Vue.js中,我们可以使用Moment…

    Vue 2023年5月28日
    00
  • js回调函数原理与用法案例分析

    JS回调函数原理与用法 在JavaScript中,函数作为一等公民,可以作为参数传递给其他函数,也可以作为另一个函数的返回值。其中,回调函数是一种常见的应用场景,它是由一个函数作为参数传递给另一个函数,并在执行完之后通过参数的形式返回执行结果。 回调函数的基本原理 回调函数的基本原理就是函数的参数可以接受一个函数作为值传递,并在函数执行过程中将这个函数执行。…

    Vue 2023年5月29日
    00
  • vue 移动端注入骨架屏的配置方法

    下面我会详细讲解在 Vue 移动端项目中如何注入骨架屏。 什么是骨架屏? 骨架屏是一种用于提高移动端用户体验的技术,它是在页面内容还未加载完成时展示的一种占位元素,可以提高用户对页面加载进度的感知。骨架屏通常采用灰色填充块线条等元素,展示页面结构和布局,让用户感知到页面正在加载内容。 注入骨架屏的配置方法 在 Vue 移动端项目中,可以使用 vue-skel…

    Vue 2023年5月28日
    00
  • 轻松学Vue组件之单文件组件

    让我来详细讲解一下“轻松学Vue组件之单文件组件”的完整攻略。 标题 什么是单文件组件? 单文件组件是 Vue.js 组件的一种组织方式,它将模板、逻辑代码和样式都写在一个文件中,方便管理和复用。 如何创建单文件组件? 创建单文件组件很简单,只需要在项目中新建一个 .vue 后缀的文件,然后按照以下格式编写代码: <template> <!…

    Vue 2023年5月28日
    00
  • vue3如何使用ref获取元素

    下面是关于vue3中如何使用ref获取元素的完整攻略: 什么是ref ref 是 Vue3 中一个新增的 API,可以用来获取/操作组件中的 DOM 元素或者子组件实例。 如何使用ref 在Vue3中,可以通过 ref 对象来获取组件中的DOM元素或子组件实例。获取的方式如下: <template> <div class="el-…

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