文章目录

  • Vue3高频问答
    • 一、vue2/vue3中常用的构建工具和脚手架分别是什么? 有什么区别?
    • 二、请说一说vue2和vue3的区别?
    • 三、请说一说vue2和vue3响应式原理的区别?
    • 四、vue3 如何定义响应式数据?
    • 五、说一说你对vue3中的setup函数?
    • 六、说一说vue3中的路由和vue2中的区别?

Vue3高频问答

一、vue2/vue3中常用的构建工具和脚手架分别是什么? 有什么区别?

● vue2中常用的构建工具和脚手架: webpack + vue-cli
● vue3中常用的构建工具和脚手架: vite + create-vue

webpack和vite的区别
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
总结起来:
Webpack是⼀个功能强⼤且灵活的静态模块打包⼯具,适⽤于⼤型复杂项⽬,但构建速度较慢。
Vite是⼀种基于原⽣ES模块的开发⼯具,提供了快速的开发体验和较快的构建速度, 适⽤于中⼩型项⽬和快速原型开发。在选择使⽤时,可以根据项⽬需求和特点进⾏评估和选择。

追问1: 何为插件(Plugin)?
专注处理在编译过程中的某个特定的任务的功能模块,可以称为插件。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、请说一说vue2和vue3的区别?

  1. 响应式原理
    ● Vue2:通过 Object.defineProperty 劫持对象属性的 getter/setter,无法直接监听新增属性和数组下标变化(需用 Vue.set)。
    ● Vue3:改用 Proxy 代理整个对象,完美监听所有属性(包括新增/删除)和数组变化,性能更好且代码更简洁。
  2. 代码组织方式
    ● Vue2(Options API):逻辑分散在 data、methods、computed 等选项中,复杂组件代码难维护。
    ● Vue3(Composition API):用 setup 函数集中组织逻辑,类似 React Hooks,相同功能代码可聚合,复用性更强(自定义 Hook)。
  3. 性能优化
    ● 虚拟 DOM 优化:Vue3 编译时标记静态节点,跳过比对(静态提升),减少渲染开销。
    ● Tree-shaking:按需引入 API,打包体积更小(如未用 v-model 则不打包相关代码)。
  4. 新特性
    ● Fragment:支持组件多根节点(Vue2 必须单根)。
    ● Teleport:将组件渲染到任意 DOM 位置(如弹窗)。
    ● Suspense:异步组件加载状态管理(类似 React)。
  5. TypeScript 支持
    ● Vue3 源码用 TypeScript 重写,提供完整类型推导,开发体验更友好。
  6. 生命周期变化
    ● beforeCreate 和 created 被 setup 替代,其他钩子名前加 on(如 onMounted)。
    总结:
    Vue3 核心升级在 响应式(Proxy)、代码组织(Composition API) 和 性能优化,同时引入新特性(Fragment/Teleport)和更好 TypeScript 支持,适合复杂项目开发。

三、请说一说vue2和vue3响应式原理的区别?

一、底层实现机制

  1. Vue2:基于 Object.defineProperty
    ○ 数据劫持:通过递归遍历对象属性,为每个属性添加 getter/setter 监听数据变化。
    ○ 局限性:
    ■ 无法检测对象新增/删除属性(需用 Vue.set/Vue.delete)。
    ■ 数组需重写方法(如 push、splice)才能触发更新。
  2. Vue3:基于 Proxy
    ○ 代理整个对象:通过 Proxy 拦截对象的任意操作(包括属性增删、数组索引修改)。
    ○ 按需响应:仅在属性被访问时递归代理深层对象(性能更优)。
    二、性能优化
  3. 依赖收集:
    ○ Vue2:初始化时递归遍历所有属性,全量劫持,性能消耗大。
    ○ Vue3:通过 Proxy 懒代理,仅在属性被访问时建立依赖,减少递归开销。
  4. 数组处理:
    ○ Vue2:需重写7种数组方法(如 push、pop),无法直接通过索引修改。
    ○ Vue3:直接通过索引修改或修改数组长度(arr[0] = 1)即可触发响应。
    三、功能扩展
  5. 动态属性支持:
    ○ Vue2:新增属性需手动调用 Vue.set,否则无法响应。
    ○ Vue3:支持动态增删属性(obj.newProp = value),无需额外API。
  6. API 设计:
    ○ Vue3引入 ref 和 reactive:
    ■ ref 处理基本类型(如 number、string),通过 .value 访问。
    ■ reactive 代理对象,支持深层嵌套属性响应。

在这里插入图片描述

面试高频追问:为什么Vue3改用Proxy?
○ 解决Vue2无法监听动态属性/数组索引的问题,且减少递归性能损耗。
2. Vue3的响应式API如何选择(ref vs reactive)?
○ 基本类型用 ref,对象/数组用 reactive;ref 内部通过 reactive 包装对象实现。
3. Vue3如何优化依赖收集?
○ 通过 WeakMap 建立三级依赖关系(对象→属性→副作用),实现精准更新。

四、vue3 如何定义响应式数据?

Vue3 通过 ref 和 reactive 定义响应式数据:
1.ref:处理基本类型(如 string/number),通过 .value 读写。

const count = ref(0);
count.value++; 

2.reactive:处理对象/数组,直接访问属性。

const state = reactive({ name: 'Vue' });
state.name = 'Vue3'; 

3.解构保持响应性:用 toRefs 解构 reactive 对象:

const { name } = toRefs(state);

ref和reactive的区别?
● ref:支持所有类型,通过 .value 操作数据(基本类型直接响应,对象内部自动转 reactive)。
● reactive:仅支持对象/数组,直接操作属性。
● ref:必须通过 .value 读写数据。reactive:直接访问属性。
● reactive 对象解构会丢失响应性,需用 toRefs 包裹, ref 解构后仍需通过 .value 操作。
建议:
● 简单值用 ref,复杂对象用 reactive;
● 需要灵活传递响应性变量时,优先 ref(如组合式函数返回值)。

五、说一说你对vue3中的setup函数?

● setup 是 Vue3 组合式 API 的入口函数,替代 Vue2 的 data/methods/生命周期 等选项,集中定义响应式数据、方法、逻辑。
● 在组件实例创建前执行,早于 beforeCreate 生命周期,此时无法访问 this。
●在实际开发中都是用setup语法糖

六、说一说vue3中的路由和vue2中的区别?

● 路由实例创建方式
○ Vue2:通过 new VueRouter({ mode: ‘history’, routes }) 创建
○ Vue3:使用 createRouter + 明确的路由模式函数(如 createWebHistory)
● 路由 API 的 Composition 支持
○ Vue3:在 setup 中使用 useRouter/useRoute 替代 this. r o u t e r  /  t h i s . router/this. router/this.route
○ Vue2:通过组件实例的 this 访问路由对象
● 导航守卫的 next 行为变更
○ Vue2:必须显式调用 next() 控制跳转
○ Vue3:next 变为可选,可通过返回值控制
● 路由匹配规则调整
○ Vue3:废弃  通配符,改用 /:pathMatch(.)* 捕获 404 路由4
● 移除的 API
○ 废弃 router.app(改用 router.currentRoute.value 获取当前路由);
○ 移除 router.match 方法;
○ 部分过渡类名变更(如 .router-link-active 保留,但行为微调)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/85748.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/85748.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/85748.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LLM06---相对位置编码】

文章目录 相对位置编码经典式XLNET式T5式DeBERTa式 相对位置编码 上一节我们介绍了绝对位置编码,这一节我们来看相对位置编码,也就是用相对位置信息来表示,之前每一个token的位置式通过一个绝对的位置向量来表示的,现在我们在计算…

纯跟踪算法本质解密:航向角偏差=预瞄角?数学证明与工程实践

定义关键问题 在深入纯跟踪算法核心前,必须澄清一对容易被混淆但至关重要的概念: 概念坐标系物理意义计算方式航向角偏差(α_global)全局坐标系车辆航向与预瞄点方向的夹角预瞄点方位角 - 车辆航向角预瞄角(α_body)车身坐标系预瞄点相对于车辆纵轴的夹…

自动驾驶叉车在仓库环境中是否安全?

随着自动驾驶叉车的兴起,仓库运营持续演进。叉车自动化技术的引入使仓库设施变得更快、更安全且更具成本效益。然而一个关键问题依然存在:它们在繁忙的仓库环境中是否安全? 一 、什么是自动驾驶叉车? 自动驾驶叉车,也…

Neo4j操作指南:修改节点数据与新增节点属性

Neo4j操作指南:修改节点数据与新增节点属性 引言 Neo4j作为领先的图数据库,提供了灵活的数据操作方式。在实际应用中,我们经常需要修改已有节点的数据或为节点添加新属性。本文将详细介绍如何使用Cypher查询语言在Neo4j中完成这些操作&…

AI大模型学习之基础数学:微积分在AI大模型中的核心-梯度与优化(梯度下降)详解

微积分在AI大模型中的核心:梯度与优化(梯度下降) 人工智能(AI)大模型的训练和优化依赖于数学基础,其中微积分、线性代数和概率统计构成了其理论核心。微积分在AI中的核心作用在于提供优化工具,尤其是通过梯度和梯度下降方法,帮助模型在高维参数空间中找到损失函数的最…

记录tweenjs踩坑

初次上手tweenjs&#xff0c;试了很多示例代码都不生效&#xff0c;结果在html中生效&#xff0c;在vue3的项目中怎么都不生效 <!DOCTYPE html> <html lang"en"><head><title>Tween.js / simplest possible example!</title><meta…

PINA开源程序用于高级建模的 Physics-Informed 神经网络

​一、软件介绍 文末提供程序和源码下载 PINA 是一个开源 Python 库&#xff0c;旨在简化和加速科学机器学习 &#xff08;SciML&#xff09; 解决方案的开发。PINA 基于 PyTorch、PyTorch Lightning 和 PyTorch Geometry 构建&#xff0c;提供了一个直观的框架&#xff0c;用…

一种对外IP/MAC地址收敛的软硬件系统

----------原创不易&#xff0c;欢迎点赞收藏。广交嵌入式开发的朋友&#xff0c;讨论技术和产品------------- 今天发一篇五年前的文章&#xff0c;不调单板。对以太网和交换片的较多理解&#xff0c;对系统级的优化。 大部分的网络设备&#xff0c;都由多种单板组成&#x…

【flink】 flink 读取debezium-json数据获取数据操作类型op/rowkind方法

flink 读取debezium-json数据获取数据操作类型op/rowkind方法。 op类型有c&#xff08;create&#xff09;,u&#xff08;update&#xff09;,d&#xff08;delete&#xff09; 参考官网案例&#xff1a;此处的"op": "u",就是操作类型。 {"before&qu…

某手游cocos2dlua反编译

一、获取加载的luac文件 通过frida hook libccos2dlua.so 的luaL_loadbuffer函数对luac进行dump js代码如下&#xff0c;得到dump后的lua文件 // 要加载的目标库名 var targetLibrary "libcocos2dlua.so"; var dlopen Module.findExportByName(null, "dlope…

`toRaw` 与 `markRaw`:Vue3 响应式系统的细粒度控制

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

Python文件迁移之Shutil库详解

Shutil是一个Python内置的用来高效处理文件和目录迁移任务的库。Shutil不仅支持基本的文件复制、移动和删除操作&#xff0c;还具备处理大文件、批量迁移目录、以及跨平台兼容性等特性。通过使用Shutil&#xff0c;我们可以更加轻松地实现文件系统的管理和维护&#xff0c;本文…

【服务器R环境架构】基于 micromamba下载 R 库包

目录 准备工作&#xff1a;下载并安装R环境下载并安装R环境方式1&#xff1a;下载 .tar.bz2 压缩包进行解压执行&#xff08;官方推荐&#xff09;方式2&#xff1a; 创建并激活R环境 下载R库包安装CRAN包在 micromamba 中安装 GitHub 包&#xff08;如 BPST&#xff09; 参考 …

基于 Apache POI 实现的 Word 操作工具类

基于 Apache POI 实现的 Word 操作工具类 这个工具类是让 AI 写的&#xff0c;已覆盖常用功能。 如不满足场景的可以让 AI 继续加功能。 已包含的功能&#xff1a; 文本相关&#xff1a; 添加文本、 设置字体颜色、 设置字体大小、 设置对齐方式、 设置字符间距、 设置字体加粗…

时间序列预测、分类 | 图神经网络开源代码分享(上)

本期结合《时间序列图神经网络(GNN4TS)综述》&#xff0c;整理了关于图神经网络在时间序列预测、分类等任务上的开源代码和学习资料以供大家学习、研究。 参考论文&#xff1a;《A Survey on Graph Neural Networks for Time Series: Forecasting, Classification, Imputation,…

Vue 添加水印(防篡改: 删除水印元素节点、修改水印元素的样式)

MutationObserver_API: 观察某一个元素的变化// index.vue<template><div class="container"><Watermark text="版权所有" style="background: #28c848"><!-- 可给图片、视频、div...添加水印 --><div class=&quo…

如何处理开发不认可测试发现的问题

解决方案 第一步&#xff1a;收集确凿证据 确保有完整的复现结果准备详细的记录材料&#xff1a; 截屏录屏操作步骤记录 带着这些证据与开发人员进行沟通 第二步&#xff1a;多角度验证 如果与开发人员沟通无果&#xff1a; 竞品分析&#xff1a;查看市场上同类产品如何…

linux生产环境下根据关键字搜索指定日志文件命令

grep -C 100 "error" server.log 用于在 server.log 文件中查找包含 “error” 的行&#xff0c;并同时显示该行前后100行的上下文。这是排查日志问题的常用技巧&#xff0c;解释一下&#xff1a; 命令参数详解 grep&#xff1a;文本搜索工具&#xff0c;用于在文件…

用vue和echarts怎么写一个甘特图,并且是分段式瀑布流

vue echarts 甘特图功能 index.vue <template><div ref"echart" id"echart" class"echart"></div> </template><script setup>import { nextTick, onMounted, ref } from "vue";import * as echarts f…

Pandas使用教程:从入门到实战的数据分析利器

一、Pandas基础入门 1.1 什么是Pandas Pandas是Python生态中核心的数据分析库&#xff0c;提供高效的数据结构&#xff08;Series/DataFrame&#xff09;和数据分析工具。其名称源于"Panel Data"&#xff08;面板数据&#xff09;和"Python Data Analysis"…