详解Vue的钩子函数(路由导航守卫、keep-alive、生命周期钩子)

yizhihongxing

Vue的钩子函数

Vue的钩子函数是Vue.js提供的一种功能,我们可以使用这些函数在组件的生命周期中绑定自定义行为。Vue的钩子函数可以分为两类,一个是系统内置的,一个是我们可以在组件中自定义的。其中,系统内置的钩子函数被称为生命周期钩子,用来在组件的不同生命周期中,执行不同的操作。

路由导航守卫

Vue的路由导航守卫,是Vue中的一种钩子函数,用于控制路由跳转的行为。我们可以在路由导航守卫中,定义路由跳转前或跳转后的行为,从而控制路由跳转的流程和结果。路由导航守卫包括了全局导航钩子、路由独享的导航钩子和组件内的导航钩子。

  • 全局导航钩子:beforeEach、beforeResolve、afterEach
  • 路由独享的导航钩子:beforeEnter
  • 组件内的导航钩子:beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave

下面是一个针对全局导航钩子的示例代码:

router.beforeEach((to, from, next) => {
  // 在路由跳转前执行
  console.log(to);
  console.log(from);
  next();
});

router.beforeResolve((to, from, next) => {
  // 在路由跳转完成前,但是组件尚未渲染时执行
  next();
});

router.afterEach(() => {
  // 在路由跳转完成并组件渲染后执行
});

keep-alive

在Vue的生命周期中,如果一个组件被销毁后再次创建,那么其数据状态和所有效果都需要重新初始化,这样的性能非常低下。此时就需要用到Vue提供的缓存组件keep-alive,用于缓存组件状态,避免多次渲染和数据初始化。

keep-alive具有以下特性:

  • 当组件被切换时,只有deactivated和activated钩子函数被触发,而mounted和destroyed钩子函数不会被触发。
  • keep-alive支持exclude和include两个属性,分别表示在缓存时忽略哪些组件和只缓存哪些组件。
  • activated和deactivated钩子函数接收一个isBack参数,用于判断是否是后退返回到当前页。

下面是一个keep-alive的示例代码:

<template>
  <div>
    <button @click="changeComponent">切换组件</button>
    <keep-alive>
      <component :is="currentComponent"></component>
    </keep-alive>
  </div>
</template>

<script>
import ComponentA from 'components/ComponentA';
import ComponentB from 'components/ComponentB';

export default {
  data() {
    return {
      currentComponent: 'ComponentA',
    };
  },
  methods: {
    changeComponent() {
      this.currentComponent = this.currentComponent === 'ComponentA' ? 'ComponentB' : 'ComponentA';
    },
  },
  activated(isBack) {
    console.log('activated', isBack);
  },
  deactivated(isBack) {
    console.log('deactivated', isBack);
  },
  components: {
    ComponentA,
    ComponentB,
  },
};
</script>

生命周期钩子

除了路由导航守卫和keep-alive之外,Vue中的生命周期钩子也是非常重要的,我们可以使用这些钩子函数,在组件的生命周期中进行初始化、更新和销毁等操作。Vue的生命周期钩子函数可以分为八个阶段,依次是:

  • beforeCreate:实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前调用。
  • created:实例创建完成后被立即调用。
  • beforeMount:在挂载开始之前被调用:相关的 render 函数首次被调用。
  • mounted:el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子函数。
  • beforeUpdate:数据更新时调用,但是发生在虚拟 DOM 重新渲染和打补丁之前。
  • updated:由于数据更改导致的虚拟 DOM 重新渲染和打补丁完成之后调用。
  • beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用。
  • destroyed:Vue 实例销毁后调用。

下面是一个生命周期钩子的示例代码:

<template>
  <div>{{ message }}</div>
</template>

<script>
export default {
  data() {
    return {
      message: 'Hello world',
    };
  },
  beforeCreate() {
    console.log('beforeCreate');
  },
  created() {
    console.log('created');
  },
  beforeMount() {
    console.log('beforeMount');
  },
  mounted() {
    console.log('mounted');
  },
  beforeUpdate() {
    console.log('beforeUpdate');
  },
  updated() {
    console.log('updated');
  },
  beforeDestroy() {
    console.log('beforeDestroy');
  },
  destroyed() {
    console.log('destroyed');
  },
};
</script>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Vue的钩子函数(路由导航守卫、keep-alive、生命周期钩子) - Python技术站

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

相关文章

  • Vue3组合式API之getCurrentInstance详解

    Vue3组合式API之getCurrentInstance详解 前言 getCurrentInstance 是 Vue 3.x 中 Composition API 的一个常用钩子函数,它可以在组件函数内获取当前组件实例的上下文,便于我们使用其它 Composition API。 使用方法 在组件函数内调用 getCurrentInstance 即可获取当前组…

    Vue 2023年5月28日
    00
  • 如何在vue项目中使用UEditor–plus

    步骤1:安装UEditor 首先,我们需要安装UEditor及其附加组件。你可以通过以下命令来安装UEditor: npm i -S vue-ueditor-plus 这样就将UEditor安装到了你的项目中。 步骤2:在项目中注册组件 现在,我们需要在Vue组件中注册UEditor组件。在你的项目中,你需要创建一个UEditor组件,代码如下: <t…

    Vue 2023年5月27日
    00
  • Vue3中SetUp函数的参数props、context详解

    下面就为您详细讲解“Vue3中SetUp函数的参数props、context详解”的完整攻略。 什么是SetUp函数 SetUp函数是Vue3中的新特性,是用来替代Vue2.x中的 data和methods等相关选项的。在SetUp函数中,我们可以定义组件的状态和行为。如下是一个SetUp函数的示例: import { reactive } from ‘vu…

    Vue 2023年5月28日
    00
  • 一文详解Vue选项式 API 的生命周期选项和组合式API

    一文详解Vue选项式 API 的生命周期选项和组合式API 前言 Vue 3.0 正式版发布后,options API 和 composition API 成为开发者最热门的讨论话题。Options API 是 Vue 2.x 默认使用的 API,而在 Vue 3.0 中引入了 Composition API,可谓是 Vue 3.0 的一大亮点。两种 API…

    Vue 2023年5月29日
    00
  • 基于Vue3+TypeScript的全局对象的注入和使用详解

    下面是关于“基于Vue3+TypeScript的全局对象的注入和使用详解”的详细攻略。 一、概述 在Vue3中,全局对象的注入方式发生了很大变化。在Vue2中,我们可以使用Vue.prototype来挂载一些全局对象和方法,在全局范围内使用。但是在Vue3中,这样的方式已经不再支持了。为了解决这个问题,Vue3提出了一个新的解决方案 – 全局注入(Globa…

    Vue 2023年5月28日
    00
  • 深入理解Vuex的作用

    深入理解Vuex的作用 什么是Vuex? Vuex 是一个专门为 Vue.js 设计的状态管理库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 在一个典型的 Vue 应用中,组件之间的通信是通过 props 和事件进行的,这样简单的场景并没有问题,但是在大型的应用中,状态的管理会变得非常复杂。每一个子组件都需要…

    Vue 2023年5月28日
    00
  • Vue Promise的axios请求封装详解

    标题:Vue Promise的Axios请求封装详解 简介:Vue.js 是一款轻量级、渐进式的 JavaScript 框架,提供了数据驱动和组件化的思想,可用于构建任何复杂的单页面应用。而 Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js。在 Vue.js 开发中,我们常常需要用到 Axios 去请求后台数据。为了…

    Vue 2023年5月28日
    00
  • Vue2.x中的Render函数详解

    针对“Vue2.x中的Render函数详解”,我提供以下完整攻略: Vue2.x中的Render函数详解 什么是Render函数 Vue中的Render函数,是指用代码构建虚拟DOM。在模板中,我们可以使用简单的语法来描述HTML结构,但在Render函数中,需要用JavaScript的语法来描述虚拟DOM。 在Vue文档中,Render函数的定义为:“在V…

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