Vue3的组合式API介绍,和Vue2生命周期函数的变化

目录

  • 1,setup
  • 2,生命周期函数
    • [1,为什么删除了 beforeCreate 和 created?](#1,为什么删除了 beforeCreate 和 created?)
    • 2,新增钩子函数
  • [3,compositionAPI 相比于 optionAPI 有哪些优势?](#3,compositionAPI 相比于 optionAPI 有哪些优势?)

Vue3 中新增了 composition API(组合式API),包括

setup() 和生命周期函数都是和组件深度绑定的,不能脱离组件单独存在。

1,setup

官网参考

  1. setup() 是在组件中使用组合式API的入口。该函数在组件属性 props 被赋值后立即执行,早于所有生命周期函数
html 复制代码
<script>
export default {
  setup(props, context){
    // props 是一个对象,包含了所有的组件属性值
    // context 是一个对象,提供了组件所需的上下文信息
  }
}
</script>

context对象的成员

成员 类型 说明
attrs 对象 同vue2的this.$attrs
slots 对象 同vue2的this.$slots
emit 方法 同vue2的this.$emit
expose 方法 新。暴露公共属性

另外,在 setup() 函数中返回的对象会暴露给模板和组件实例。如果使用的 <script setup> 语法糖,那就会默认返回所有顶层绑定。

  1. 也可以通过它将组合式API集成到选项式API中。
html 复制代码
<script>
import { ref } from 'vue'
export default {
  setup() {
    const count = ref(0)
    
    // 返回值会暴露给模板和其他的选项式 API 钩子
    return {
      count
    }
  },
  mounted() {
    console.log(this.count) // 0
  }
}
</script>

2,生命周期函数

vue2 option api vue3 option api vue 3 composition api
beforeCreate beforeCreate 不再需要,代码可放到setup中
created created 不再需要,代码可放到setup中
beforeMount beforeMount onBeforeMount
mounted mounted onMounted
beforeUpdate beforeUpdate onBeforeUpdate
updated updated onUpdated
beforeDestroy 改 beforeUnmount onBeforeUnmount
destroyed 改unmounted onUnmounted
errorCaptured errorCaptured onErrorCaptured
- 新renderTracked onRenderTracked
- 新renderTriggered onRenderTriggered

1,为什么删除了 beforeCreate 和 created?

因为这2个是用于在 optionAPI 中完成数据响应式的。而 vue3 的响应式API是独立的,所以不需要。

2,新增钩子函数

钩子函数 参数 执行时机
renderTracked DebuggerEvent 渲染 vdom 收集到的每一次依赖时
renderTriggered DebuggerEvent 某个依赖变化导致组件重新渲染时

参数DebuggerEvent:

  • target: 跟踪或触发渲染的对象
  • key: 跟踪或触发渲染的属性
  • type: 跟踪或触发渲染的方式

举例:

html 复制代码
<template>
  <h1>{{ msg }}</h1>
  <button @click="count++">count is: {{ count }}</button>
</template>

<script>
export default {
  props: {
    msg: Boolean,
  },
  data() {
    return {
      count: 0,
    };
  },
  renderTracked(e) {
    console.log("renderTracked", e);
  },
  renderTriggered(e) {
    console.log("renderTriggered", e);
  },
};
</script>

首先,renderTracked() 会执行2次,因为收集了2个依赖 msg 和 count。

当点击修改 count 时,renderTriggered() 会执行一次,因为依赖 count 发生了变化。

3,compositionAPI 相比于 optionAPI 有哪些优势?

  1. 为了更好的逻辑复用和代码组织。
  2. 更好的类型推导。

compositionAPI 配合独立的响应式API,可以在组件内部进行更加细粒度的控制,使得组件中不同的功能高度聚合,提升了代码的可维护性。

对于不同组件的相同功能,也能够更好的复用。

相比于optionAPI,compositionAPI 中没有了指向奇怪的 this,所有的 api 变得更加函数式,这有利于和类型推断,比如和 TS 深度配合。


以上。

相关推荐
M--Y2 小时前
LangGraph 工作流模式
开发语言·javascript·python·langchain·大模型·llm·langgraph
星栈3 小时前
视频即代码,Remotion 能做什么、不能做什么
前端·音视频开发
广州华水科技3 小时前
单北斗GNSS位移监测系统的应用与技术解析
前端
用户47949283569153 小时前
从一句话或代码仓到可交互 HTML:开源 Agent 画图技能 Archify v3.2 实测与选型边界
前端·后端·面试
风骏时光牛马5 小时前
生成一个AI多模态标题,仅输出一条标题,无额外文字、问句、备选、配图、文案等任何附加内容,不需要其他的任务服务 只要标题。
前端
wangruofeng6 小时前
从 GIF 到 AVIF:网页图片格式演进与 2026 年选型指南
前端·架构
清晨Coding7 小时前
为什么用 React Developer Tools 查看组件树这么乱?
前端·react.js
johnjincaaaa7 小时前
猿人学第 18 题「jsvmp 洞察先机」逆向通关实录
javascript·后端
鶴哥只手遮天7 小时前
《Electron 45.2.3 内核解剖》第 4 章 补丁体系:380 个补丁改了什么
前端·electron
FungLeo9 小时前
成为全栈·Vue 管理后台篇·分类树与标签管理:层级数据如何落到管理界面
前端·javascript·vue.js·分类树·naive ui·标签管理·前端数据结构