分享几个常问的vue3面试题!

一、说一下Vue3的新特性?

1、新增组合API

常用的有setup、reactive、ref、toRefs

2、生命周期变化

创建:

beforeCreate和created被setup替代了

挂载:

onBeforeMount

onMounted

更新:

onBeforeUpdate

onUpdated

销毁:

onBeforeUnmount

onUnmounted

3、响应式原理变化

用Proxy代理配合Reflect反射代替了v2中的Object.defineProperty()实现数据的响应式

4、更好的支持TS

因为源码用TS写的

5、新增内置组件

Fragment(片段)、Teleport(瞬移)、Suspense(不确定)

6、新的脚手架工具vite

7、可以设置多个根节点

8、重写虚拟DOM的实现和Tree-Shaking,渲染速度更快、打包体积更小

9、移除了一些东西

移除v-on的键盘修饰符

移除过滤器filter

二、说一下reactive和ref的区别?

ref:

通过Object.defineProperty()给value的属性添加getter、setter来实现响应式

一般用来处理基本数据类型,也能处理复杂数据类型,只不过内部会自动将对象转换为reactive的代理对象

在js中要加.value,在模版中不需要

reactive:

通过Proxy对目标对象中的所有属性动态地进行数据劫持,并通过Reflect操作对象内部数据来实现响应式

一般用来处理复杂数据类型,会实现递归深度响应式

三、说一下Vue3的响应式原理?

vue3采用数据代理+数据劫持+发布订阅模式的方法。

在初始化vue实例时,通过Proxy进行数据代理,用Proxy对象来代理目标对象,

并且对目标对象中的所有属性动态地进行数据劫持,动态地指定一个getter、setter,并通过Reflect操作对象内部数据。

当Proxy对象属性或Proxy数组元素发生变化时,会触发Proxy属性的setter方法,然后通过Reflect操作目标对象属性,同时触发它Dep实例的notify方法进行依赖分发,通知所有依赖的Watcher实例执行内部回调函数。

最后会触发renderWatcher回调,会重新执行render函数,重新对比新旧虚拟DOM,重新渲染页面。

当读取Proxy对象属性时,会触发Proxy属性的getter方法,然后触发它Dep实例的depend方法进行依赖收集。

四、说一下组合式API写法对比选项式API写法的优点?

组合式API写法将组件的逻辑按照功能进行划分,将相关逻辑放在一起,使得代码更加清晰和易于维护

五、说一下常用的一些组合API及作用?

ref:定义一个基础数据类型的响应式数据

reactive:定义一个复杂数据类型的响应式数据

toRefs:把响应式数据对象中的所有属性变成ref对象,常用于解构响应式对象属性

computed:计算属性

watch:变化时监听

watchEffect:立即监听

相关推荐
mCell3 分钟前
JavaScript 运行机制详解:再谈 Event Loop
前端·javascript·浏览器
amy_jork2 小时前
npm删除包
开发语言·javascript·ecmascript
帧栈4 小时前
开发避坑指南(27):Vue3中高效安全修改列表元素属性的方法
前端·vue.js
max5006004 小时前
基于桥梁三维模型的无人机检测路径规划系统设计与实现
前端·javascript·python·算法·无人机·easyui
excel4 小时前
使用函数式封装绘制科赫雪花(Koch Snowflake)
前端
我命由我123455 小时前
软件开发 - 避免过多的 if-else 语句(使用策略模式、使用映射表、使用枚举、使用函数式编程)
java·开发语言·javascript·设计模式·java-ee·策略模式·js
萌萌哒草头将军5 小时前
Node.js v24.6.0 新功能速览 🚀🚀🚀
前端·javascript·node.js
AALoveTouch6 小时前
大麦APP抢票揭秘
javascript
rannn_1116 小时前
【Javaweb学习|黑马笔记|Day1】初识,入门网页,HTML-CSS|常见的标签和样式|标题排版和样式、正文排版和样式
css·后端·学习·html·javaweb
持久的棒棒君7 小时前
启动electron桌面项目控制台输出中文时乱码解决
前端·javascript·electron