Vue选项式 API 的生命周期选项和组合式 API

Vue2、Vue3 生命周期的变化
正好在看Vue的官方文档,也正好比对一下,做一下笔记

选项式 API 的生命周期选项的变化
在这里插入图片描述

这里我们会发现Vue3对Vue2的生命周期钩子似乎没有做大的调整

修改
destroyed 生命周期选项被重命名为 unmounted
beforeDestroy 生命周期选项被重命名为 beforeUnmount
新增
errorCaptured:在捕获一个来自后代组件的错误时被调用。
renderTracked:跟踪虚拟 DOM 重新渲染时调用。
renderTriggered:当虚拟 DOM 重新渲染被触发时调用。
小知识
所有生命周期钩子的 this 上下文将自动绑定至当前的实例中,所以我们可以在 钩子函数中通过this轻松访问到 data、computed 和 methods。

那么我有个大胆的想法!就是用箭头函数进行定义生命周期钩子函数,可以如期的访问到我们想要的实例吗?

测试:

const app = Vue.createApp({
  data() {
    return {
      cart: 0
   }
},
mounted: () => { console.log(this.cart) },
  methods: {
    addToCart() {
      this.cart += 1
    }
  }
})


app.mount("#app");
复制代码

在这里插入图片描述

不出所望的undefined了,我们打印一下this

在这里插入图片描述

指向的上下文是window并不是我们的Vue实例。

至于为什么会这样,我们可以很简单的从箭头函数的特性来进行一波简单的解释:
我们在定义箭头函数的时候,定义初就绑定了父级上下文,因为箭头函数绑定了父级上下文,所以 this 不会指向预期的组件实例,并且this.data、this.addToCart 都将会是 undefined。

组合式 生命周期选项 API
选项式 API 的生命周期选项和组合式 API 之间是有映射关系的, 整体来看,变化不大,只是名字大部分上是on${选项式 API 的生命周期选项}

beforeCreate -> 使用 setup()
created -> 使用 setup()
beforeMount -> onBeforeMount
mounted -> onMounted
beforeUpdate -> onBeforeUpdate
updated -> onUpdated
beforeUnmount -> onBeforeUnmount
unmounted -> onUnmounted
errorCaptured -> onErrorCaptured
renderTracked -> onRenderTracked
renderTriggered -> onRenderTriggered
activated -> onActivated
deactivated -> onDeactivated
参考:组合式 API 生命周期钩子
使用:

export default {
  setup() {
    // mounted
    onMounted(() => {
      console.log('Component is mounted!')
    })
  }
}
复制代码

VNode 生命周期事件
在查阅 Vue 的生命周期的时候,发现了这个,说实话我在平常业务开发中还真没怎么用过,不过秉承着宁可多学些也不错过的就记录一下吧!

Vue2x
在Vue2版本中,如果我们想要监听组件内的生命周期的阶段。我们可以通过 hook:${组件生命周期钩子名称}来进行组件内部的事件监听。

<template>
  <child-component @hook:updated="onUpdated">
</template>
复制代码

Vue3x
在 Vue 3 中,如果我们想要监听组件内的生命周期的阶段。我们可以通过 vnode-${组件生命周期钩子名称}来进行组件内部的事件监听。额外地,这些事件现在也可用于 HTML 元素,和在组件上的用法一样。

<template>
  <child-component @vnode-updated="onUpdated">
</template>

复制代码
或者用驼峰命名法

<template>
  <child-component @vnodeUpdated="onUpdated">
</template>

最后
如果你觉得此文对你有一丁点帮助,点个赞。或者可以加入我的开发交流群:1025263163相互学习,我们会有专业的技术答疑解惑

如果你觉得这篇文章对你有点用的话,麻烦请给我们的开源项目点点star:http://github.crmeb.net/u/defu不胜感激 !

完整源码下载地址:https://market.cloud.tencent.com/products/33396

PHP学习手册:https://doc.crmeb.com
技术交流论坛:https://q.crmeb.com

### Vue 选项式 API组合式 API 的工作原理及区别 #### 工作原理 Vue.js 提供了两种主要的 API 风格来定义组件逻辑:选项式 API (Options API) 组合式 API (Composition API)[^1]。 - **选项式 API**: 这种方式通过 `data`、`methods`、`computed` 等预定义选项来组织代码。开发者将数据、方法其他功能分门别类地放置到这些选项中,从而形成一种基于对象属性的方式来管理状态行为[^2]。 - **组合式 API**: 它允许开发者通过函数的形式直接操作响应式变量生命周期钩子。这种模式更加灵活,能够更好地支持逻辑复用,并且可以按需导入所需的模块[^3]。 #### 主要区别 ##### 1. 结构化差异 - **选项式 API** 使用固定的键名(如 data, methods, computed)来分类存储不同类型的逻辑[^4]。 - **组合式 API** 则鼓励按照功能性需求或者业务场景划分逻辑块,通常在一个 setup 函数内部完成所有的初始化设置[^5]。 ##### 2. 响应性机制处理 - 在 **选项式 API** 中,响应性的创建依赖于特定的方法比如 `this.$set()` 或者自动追踪的对象属性变化。 - 对于 **组合式 API**, 开发人员可以直接利用诸如 `ref`, `reactive` 来手动声明并控制哪些部分应该是反应式的。 ##### 3. 生命周期挂钩调用位置 - 在传统的 **选项式 API** 下,生命周期回调被绑定至各自的同名字段下(例如 created(), mounted()) . - 而在新的 **组合式 API** 设计里,可以通过 import 导入对应的 lifecycle hooks 并显式注册他们,在setup() 方法体内执行相应的动作. ##### 4. 复杂度与学习曲线 - 新手可能更容易理解直观简单的 **选项式 API** 架构因为它的命名清晰明了; - 另一方面,随着应用规模增大或遇到复杂交互时,**组合式 API** 展现出更强的优势因为它提供了更高的灵活性以及更好的逻辑分离能力。 #### 实现示例 下面分别给出两者的简单实现例子: ```javascript // Options API Example export default { data() { return { count: 0 }; }, methods: { increment() { this.count++; } } } ``` ```javascript // Composition API Example import { ref } from 'vue'; export default { setup() { const count = ref(0); function increment() { count.value++; } return { count, increment }; } } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CRMEB定制开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值