Vue3生命周期钩子函数详解

Vue3生命周期钩子函数详解

Vue3的生命周期函数是在组件渲染过程中执行的一系列函数,它们允许我们在组件的不同阶段执行自定义的代码逻辑。 Vue3中的生命周期函数与Vue2中的生命周期函数在名称和行为方面都有所改变。

生命周期钩子函数一览

总的来说,Vue3中有8个生命周期函数,这些生命周期函数按照它们执行的时间点被分为三类:

  • 创建期(creation):
  • setup()
  • 更新期(update):
  • onBeforeUpdate()
  • onUpdated()
  • onRenderTracked()
  • onRenderTriggered()
  • 卸载期(unmount):
  • onBeforeUnmount()
  • onUnmounted()
  • onDeactivated()(新添加)

生命周期钩子函数的执行顺序

Vue3中的生命周期函数的执行顺序如下:

  1. setup()
  2. 对组件中响应式数据的更改会触发以下三个生命周期钩子函数:
  3. onBeforeUpdate()
  4. 组件重新渲染
  5. onUpdated()
  6. 在组件卸载之前,组件中所有的effect都会执行一次
  7. onBeforeUnmount()
  8. 卸载组件中的所有effectwatch
  9. onUnmounted()

生命周期钩子函数的使用

setup()

setup()函数是Vue3中的新生命周期函数,它的目的是替代Vue2中的beforeCreatecreated生命周期函数,用来完成组件实例的创建和初始化。setup()函数在组件实例被创建之前被调用,它返回一个对象,对象中的属性和方法会被注入到组件实例中,我们也可以在setup()函数中创建和设置组件中的响应式数据。

<template>
  <div>
    <p>Count: {{ count }}</p>
    <button @click="increment">Increment</button>
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const count = ref(0);

    const increment = () => {
      count.value++;
    };

    return {
      count,
      increment,
    };
  },
};
</script>

在上面的示例中,我们通过ref()创建了一个名为count的响应式数据属性和一个increment()方法,然后通过return语句将这两个属性/方法注入到组件中。

值得注意的是,setup()函数的返回值必须是一个普通对象或函数,不能是一个Promise或者没有返回值。

onBeforeUpdate()

onBeforeUpdate()生命周期函数在组件进行重新渲染之前被调用,此时我们可以访问到组件更新之前的状态,通过这个钩子函数我们可以检查、调整或取消当前的更新。

<template>
  <div>
    <p>Count: {{ count }}</p>
    <button @click="increment">Increment</button>
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const count = ref(0);

    const increment = () => {
      count.value++;
    };

    return {
      count,
      increment,
      message: 'Message from before update',
    };
  },

  onBeforeUpdate() {
    console.log(this.message);
  },
};
</script>

在上面的示例中,我们在setup()函数中声明了一个名为message的数据属性,然后在onBeforeUpdate()函数中输出了message的值。当我们点击按钮触发组件重新渲染时,onBeforeUpdate()函数会在更新之前被调用,并且输出Message from before update

onUpdated()

onUpdated()生命周期函数在组件进行重新渲染之后被调用,此时我们可以访问到组件更新之后的状态,通过这个钩子函数我们可以执行一些与更新后子组件相关的操作。

<template>
  <div>
    <p>Count: {{ count }}</p>
    <button @click="increment">Increment</button>
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const count = ref(0);

    const increment = () => {
      count.value++;
    };

    return {
      count,
      increment,
    };
  },

  onUpdated() {
    console.log(`Count updated to ${this.count}`);
  },
};
</script>

在上面的示例中,我们在onUpdated()函数中输出了count的值,当我们点击按钮触发组件重新渲染时,onUpdated()函数会在更新之后被调用,并且输出Count updated to后面跟着当前count的值。

示例

下面,我们来看一个更加具体的示例,该示例演示了onBeforeUnmount()onUnmounted()生命周期函数的用法。

<template>
  <div>
    <p>Count: {{ count }}</p>
    <button @click="increment">Increment</button>
  </div>
</template>

<script>
import { ref, onBeforeUnmount, onUnmounted } from 'vue';

export default {
  setup() {
    const count = ref(0);

    const increment = () => {
      count.value++;
    };

    // Effect用来演示:在组件卸载之前,组件中所有的`effect`都会执行一次
    const effect = () => console.log('effect');

    onBeforeUnmount(() => {
      console.log('Unregistering effect...');
      effect();
    });

    onUnmounted(() => {
      console.log('Component unmounted.');
    });

    return {
      count,
      increment,
      effect,
    };
  },
};
</script>

在上面的示例中,我们在setup()函数中定义了一个名为effect的函数,并在它之前使用了onBeforeUnmount()钩子函数,在该函数内部注销了effect。在onUnmounted()钩子函数中输出了组件卸载的消息。我们在组件内部使用effect函数来演示,在组件卸载之前,组件中所有的effect都会执行一次。

总结

Vue3中的生命周期函数在Vue2的基础上进行了一些改进,新添加了一个setup()函数,并为其他生命周期函数改变了名称和行为,以更好地适应Vue3的特性和优化。在使用生命周期函数时,我们需要注意不同生命周期函数的执行时间点和使用场景,合理地利用生命周期函数可以让我们更好地理解组件状态和行为。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue3生命周期钩子函数详解 - Python技术站

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

相关文章

  • 前端实时通信的8种方式及其优缺点和实现方式

    前端实时通信的8种方式及其优缺点和实现方式 前端实时通信是目前前端开发中常见的需求之一,常用于在线聊天、游戏、协作、数据实时更新等场景中,下面将对前端实时通信的8种方式进行详细讲解。 方式一:Ajax轮询 优点 兼容性好,支持大部分浏览器。 能够实时获取后端数据。 缺点 客户端会不断向服务器发送请求,增大服务器压力。 不是真正意义上的实时通信。 实现方式 f…

    Vue 2023年5月28日
    00
  • Vue.js之VNode的使用

    下面就为大家详细讲解如何使用Vue.js中的VNode。 1. 什么是VNode VNode是Vue.js中的一种虚拟节点,它是Vue.js中的一个核心概念。 在Vue.js中,每个组件的视图分为模板(template)和渲染函数(render function)两种实现方式。而VNode就是在渲染函数中构建的虚拟DOM节点。 与真实的DOM节点不同,VNo…

    Vue 2023年5月28日
    00
  • Vue前端打包的详细流程

    Vue前端打包的详细流程包括:安装依赖、配置打包目录、启动打包、测试打包。 安装依赖 在进行Vue前端打包之前,需要先安装相关的依赖。首先需要安装Node.js和npm,使用类Unix系统(如macOS、Linux)的用户可以通过终端运行以下命令安装: sudo apt-get install nodejs sudo apt-get install npm …

    Vue 2023年5月28日
    00
  • vue指令以及dom操作详解

    Vue指令以及DOM操作详解 在Vue中,指令(Directive)是一个带有 v- 前缀的特殊属性。指令用于在模板中添加特殊的行为,常见的指令有v-if、v-for、v-bind、v-on等。 v-if指令 v-if指令用于根据表达式的值的真假,来切换元素的存在。例如下面这个示例: <div v-if="showFlag">…

    Vue 2023年5月27日
    00
  • Vue 通过公共字段,拼接两个对象数组的实例

    要完成“Vue 通过公共字段,拼接两个对象数组”的操作,可以使用Vue中的计算属性来实现。 在Vue实例的data中定义两个对象数组: data: { arr1: [ { id: 1, name: ‘A’, age: 20 }, { id: 2, name: ‘B’, age: 22 }, { id: 3, name: ‘C’, age: 18 }, ], …

    Vue 2023年5月27日
    00
  • ionic cordova一次上传多张图片(类似input file提交表单)的实现方法

    一、背景 在移动端开发中,经常会遇到需要上传多张图片的需求,例如上传头像、相册、动态图片等。Ionic是一个基于AngularJS和Cordova的开发框架,提供了丰富的插件和能力,可以便捷地实现这类功能。 二、实现思路 实现多张图片上传的关键在于,需要通过Cordova的File Transfer插件将多张图片上传到服务器。因为Cordova File插件…

    Vue 2023年5月28日
    00
  • Vue局部组件数据共享Vue.observable()的使用

    Vue 是一个非常好用的 JavaScript 前端框架,而组件数据共享是 Vue 中非常常见的需求。Vue.observable() 可以用于将任意一个普通对象转化成响应式的对象,从而实现对该对象的数据共享和观测。下面提供关于Vue局部组件数据共享Vue.observable()的使用的攻略。 目录 Vue.observable() 简介 在 Vue 组件…

    Vue 2023年5月28日
    00
  • Vue.js如何获取data-*的值

    当我们需要在 Vue.js 中获取 HTML 标签上的 data-* 属性值时,我们可以通过以下两种方式实现: 方式一:在模板中使用 我们可以在 HTML 模板中使用 v-bind 指令或简写的 : 符号将 data-* 属性值绑定到 Vue.js 实例的数据对象中,然后通过数据对象的属性获取值。 HTML 模板代码: <div id="ap…

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