一文搞懂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框架 Ajax获取数据列表并用BootStrap显示出来

    下面是使用Vue框架Ajax获取数据列表并用Bootstrap显示出来的攻略: 1. 准备工作 在执行前,我们需要准备以下工作: 一个后端API,提供获取数据的功能 这个API可以使用后端框架比如Node.js的Express框架等来搭建。我们需要实现一个路由,接收Ajax请求,查询数据库中相应的数据并返回给请求者。 安装Vue.js和Bootstrap 我…

    Vue 2023年5月28日
    00
  • 浅析vue3响应式数据与watch属性

    浅析Vue3响应式数据与watch属性 什么是Vue3响应式数据? 在 Vue3 中,响应式数据是通过函数 reactive() 创建的一个响应式对象,它通过 Proxy 对象来监听对象的变化,使得当对象发生改变时,视图会自动更新。我们可以通过下面的代码来创建一个响应式对象: import { reactive } from ‘vue’ const stat…

    Vue 2023年5月27日
    00
  • vue如何循环给对象赋值

    想要循环给对象赋值,可以使用Vue中的v-for指令来实现。v-for指令可以遍历一个数组或者一个对象中的所有元素,常用语渲染列表,也可以用于动态生成表单。 对于对象,v-for指令可以通过它的第二个参数,键名(key),来获取到对象的键名和键值。通过在模板中使用{ key, value } in object 表达式可以遍历对象。具体过程如下: 1.创建一…

    Vue 2023年5月28日
    00
  • vue3.0实现考勤日历组件使用详解

    vue3.0实现考勤日历组件使用详解 前言 考勤日历是一个在管理系统和应用中广泛使用的组件。本文将介绍如何使用Vue3.0来实现考勤日历组件。 步骤 1. 准备工作和安装依赖 在开始本文的实现之前,你需要已经安装好了Vue3.0并创建了一个Vue工程。在进行下一步之前,你需要确保以下依赖库已经安装好了: npm install –save vue-full…

    Vue 2023年5月28日
    00
  • 基于Vue+Webpack拆分路由文件实现管理

    接下来我会为您详细讲解“基于Vue+Webpack拆分路由文件实现管理”的完整攻略。这个攻略主要分为以下几个步骤: 1. 安装和配置Webpack 首先,我们需要在本地安装Webpack和webpack-dev-server。可以通过执行下面的命令进行安装: npm install webpack webpack-cli webpack-dev-server…

    Vue 2023年5月28日
    00
  • 22个Vue优化技巧(项目实用)

    下面是对“22个Vue优化技巧(项目实用)”的详细讲解。 一、懒加载路由 描述 使用懒加载路由可以大大提升项目的性能,当路由被访问时才会加载对应的组件,如果不使用懒加载路由,那么全局的所有组件会在项目启动时被加载,浪费大量资源。 示例 在路由文件中使用import语句,将组件打包成一个chunk,当路由被匹配时才会加载: const Foo = () =&g…

    Vue 2023年5月27日
    00
  • vue中使用localstorage来存储页面信息

    当使用Vue构建单页应用程序时,使用localStorage来存储页面信息是一种常见的做法。localStorage是一个API,可以将数据永久存储在浏览器中,即使用户关闭了浏览器,数据也不会丢失。以下是Vue中使用localStorage来存储页面信息的完整攻略,包含两条示例说明。 使用localStorage存储数据 要在Vue中使用localStora…

    Vue 2023年5月28日
    00
  • vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件

    使用vue-cli 3来集成vue-bootstrap-datetimepicker日期插件,需要使用以下步骤: 步骤一:安装依赖 在命令行中进入项目根目录,然后运行以下命令来安装需要的依赖: npm install vue-bootstrap-datetimepicker –save 步骤二:引入CSS和JS文件 在你的Vue组件之前,需要引入CSS和J…

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