当前位置: 首页 > news >正文

compositionAPI

面试题:composition api相比于option api有哪些优势?

不同于reactivity api,composition api提供的函数很多是与组件深度绑定的,不能脱离组件而存在。

1. setup

// component
export default {setup(props, context){// 该函数在组件属性被赋值后立即执行,早于所有生命周期钩子函数// props 是一个对象,包含了所有的组件属性值// context 是一个对象,提供了组件所需的上下文信息}
}

context对象的成员

成员类型说明
attrs对象vue2this.$attrs
slots对象vue2this.$slots
emit方法vue2this.$emit

2. 生命周期函数

vue2 option apivue3 option apivue 3 composition api
beforeCreatebeforeCreate不再需要,代码可直接置于setup中
createdcreated不再需要,代码可直接置于setup中
beforeMountbeforeMountonBeforeMount
mountedmountedonMounted
beforeUpdatebeforeUpdateonBeforeUpdate
updatedupdatedonUpdated
beforeDestroy beforeUnmountonBeforeUnmount
destroyedunmountedonUnmounted
errorCapturederrorCapturedonErrorCaptured
-renderTrackedonRenderTracked
-renderTriggeredonRenderTriggered

新增钩子函数说明:

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

DebuggerEvent:

  • target: 跟踪或触发渲染的对象
  • key: 跟踪或触发渲染的属性
  • type: 跟踪或触发渲染的方式
App.vue
<template><img alt="Vue logo" src="./assets/logo.png" /><HelloWorld msg="Hello Vue 3.0 + Vite" />
</template><script>
import HelloWorld from './components/HelloWorld.vue'export default {name: 'App',components: {HelloWorld}
}
</script>
HelloWorld .vue
<template><h1>{{ msg }}</h1><button @click="count++">count is: {{ count }}</button><p>Edit<code>components/HelloWorld.vue</code>to test hot module replacement.</p>
</template><script>
export default {name: "HelloWorld",props: {msg: String,},data() {return {count: 0,};},renderTracked(e) {console.log(e); //count},renderTriggered(e) {console.log("renderTriggered", e); //msg或者count},
};
</script>

3. 面试题参考答案

面试题:composition api相比于option api有哪些优势?

从两个方面回答:

  1. 为了更好的逻辑复用和代码组织
  2. 更好的类型推导
有了composition api,配合reactivity api,可以在组件内部进行更加细粒度的控制,使得组件中不同的功能高度聚合,提升了代码的可维护性。对于不同组件的相同功能,也能够更好的复用。
相比于option api,composition api中没有了指向奇怪的this,所有的api变得更加函数式,这有利于和类型推断系统比如TS深度配合。
http://www.lryc.cn/news/134586.html

相关文章:

  • vscode配置调试环境-windows系统
  • 智慧城市能实现嘛?数字孪生又在其中扮演什么角色?
  • 【置顶帖】关于博主/关于博客/博客大事记
  • 华为数通方向HCIP-DataCom H12-821题库(单选题:01-20)
  • Java【手撕双指针】LeetCode 11. “盛水最多的容器“, 图文详解思路分析 + 代码
  • vue3——递归组件的使用
  • 【爬虫练习之glidedsky】爬虫-基础1
  • 计算机视觉入门 1)卷积分类器
  • SpringBoot 配置优先级
  • 钢筋的形变屈服度测量
  • 【BASH】回顾与知识点梳理(三十七)
  • 智慧农场云养猪平台原来是这样的!
  • 【3Ds Max】可编辑多边形“边界”层级的简单使用
  • Rancher-RKE2-安装流程
  • OrienterNet: visual localization in 2D public maps with neural matching 论文阅读
  • iOS导航栏闪屏以及statusBar背景色的更改
  • Centos开启防火墙和端口命令
  • 基于微信小程序的宠物领养平台的设计与实现(Java+spring boot+微信小程序+MySQL)
  • Mongodb基础操作
  • 数据结构与算法:计算机科学的基石
  • 曲线救国 | 双非渣硕的秋招路
  • 气传导耳机怎么样?四款值得入手的气传导耳机推荐
  • HTML <svg> 标签
  • Python随机密码生成。编写程序,在26个字母大小写和10个数字随机生成10个8位密码。
  • 数据结构作业——哈夫曼树
  • Python XML处理中级篇:深入探索lxml库
  • 岩棉革新——洛科威推出NGF新一代岩棉产品
  • 关于 docker 基础题目
  • Skywalking全链路追踪【学习笔记】
  • Sphinx——Python生成API文档