面试前端随笔20240510

devtools/2024/9/23 14:26:42/

最近公司招聘前端开发人员有幸参与帮听,总结了三个有关vue的面试问题和答案,现在分享一下。

1.Vue2数据监听无法监听数组为啥?有啥解决方案?vue3中是如何处理这个问题?

vue2的官方说明了defineProperty的一些限制:
数组在两种情况下是无法监听的:
1.利用索引直接设置一个数组项时,例如:arr[indexOfItem] = newValue;
2.修改数组的长度时,例如:arr.length = newLength;

对象一下情况无法监听
无法监听新增属性和删除属性

Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。

Vue的数据响应式原理主要是通过ES5的Object.defineProperty方法来实现的。

Vue在初始化数据对象时,会遍历数据对象的所有属性,并使用Object.defineProperty将这些属性转为访问器属性,从而在对这些属性进行读取或者赋值的时候,能够触发getter和setter函数,然后Vue就能够更新视图。

Vue2数据监听无法监听数组,本质原因是Object.defineProperty 存储描述中的getter和setter触发都是通过索引访问和设置。申明的对象属性值也就是索引值是有限和确定的,但是数组是一种特殊的对象它的索引值是不固定,在getter和setter 无法劫持。
Vue2内部通过重写数组的原型方法来监听数组的变动。(push、pop、shift、unshift、splice、sort、reverse)会触发原有的逻辑之外,还会触发视图更新。
vue3中使用的proxyES6代理

2.Vuex存储的状态存放到哪里,什么情况下会丢失?是否有大小限制?如何解决上述问题?

Vuex 的状态存储在内存中。

以下情况下会丢失:
1.页面刷新:当浏览器地址栏中的URL发生变化,导致页面全部重新加载时,Vuex中的状态会丢失。
2.使用Vue Router的单页面应用(SPA)导航时:如果你使用的是Vue Router的默认导航策略,即使是同一个路由的不同视图间的切换,也可能会导致组件重新创建,从而导致Vuex状态的丢失。
3.错误的Vuex状态管理:如果你在操作Vuex状态时出现了错误,比如直接修改了state的属性而不是通过mutations,这样可能会导致状态的丢失。

Vuex存储的数据理论上是没有大小限制的,但是过大,可能会导致性能问题,甚至可能引起内存溢出错误。

解决方法有如下:
1.存储到浏览器本地存储中(sessionStorage、localStorage、cookie)。
2.使用第三方插件

3.开放问题Vue页面渲染是如何进行的?

vue内部编译顺序:

第一步,把模板编译为render函数
第二步,实例进行挂载, 根据根节点render函数的调用,递归的生成虚拟dom。
第三步,对比虚拟dom,渲染到真实dom。

生成虚拟DOM包含下过程

  1. 第一步,用 JS 对象模拟 DOM 树,得到一棵虚拟 DOM 树。
  2. 第二步,当页面数据变更时,生成新的虚拟 DOM 树,比较新旧两棵虚拟 DOM 树的差异。
  3. 第三步,把差异应用到真正的 DOM 树上。

第四步,将虚拟DOM 生成真正的DOM插入到页面中,进行页面渲染。

vue项目文件加载顺序

  1. 加载index.html文件
  2. 运行main.js文件
  3. main.js挂载了核心代码以及该文件下其他模块。

生命周期顺序

在这里插入图片描述


http://www.ppmy.cn/devtools/39661.html

相关文章

程序设计实践-课程设计任务布置(麦当劳) (price 200)

code price 200 WX: help-assignment 课题任务-概述 2023年5月,麦当劳在北邮开业。大量的学生去那里订餐。正因为如此,麦当劳的在线点餐系统经常关闭以避免拥挤,尤其是在午餐和晚餐时间。该系统的关闭时间不确定。北邮的学生认为这非常麻烦…

【Leetcode】 top100 round2 需要加强版

知识补充 python赋值的执行顺序: 在41中,对于测试案例[-1,4,3,1] 当i1时,以下两条语句的执行结果不一致: “nums[nums[i]-1], nums[i] nums[i], nums[nums[i]-1]” “nums[i], nums[nums[i]-1] nums[nums[i]-1], nums[i]” 解析…

ok_Keil实用小技巧 | Keil定制Hex文件名实现的方法

Keil实用小技巧 | Keil定制Hex文件名实现的方法 echo off REM 可执行文件(Hex)文件名 set HEX_NAMEDemo REM 可执行文件(Hex)文件路径 set HEX_PATH.\Objects REM 定制Hex输出路径 set OUTPUT_PATH.\Output REM 软件版本文件…

(文章复现)基于变异粒子群算法的主动配电网故障恢复策略

参考文献: [1]徐岩,张荟,孙易洲.基于变异粒子群算法的主动配电网故障恢复策略[J].电力自动化设备,2021,41(12):45-53.DOI:10.16081/j.epae.202108030. 1.基本原理 为提高主动配电网故障恢复的快速性和可靠性,提出一种基于变异粒子群算法的恢复策略。光…

Tarjan----寻找最近公共祖先(LCA) 板子

一、Tarjan算法作用: Tarjan算法是一种用于寻找图中节点的最近公共祖先(LCA)的算法。该算法通过深度优先搜索(DFS)遍历图,并使用并查集(Union-Find)数据结构来快速找到两个节点的最近…

[YOLOv8] 用YOLOv8实现指针式圆形仪表智能读数(三)

最近研究了一个项目,利用python代码实现指针式圆形仪表的自动读数,并将读数结果进行输出,若需要完整数据集和源代码可以私信。 目录 🍓🍓1.yolov8实现圆盘形仪表智能读数 🙋🙋2.表盘智能读数…

WPS二次开发系列:如何使用WPS返回的FileUri

作者持续关注 WPS二次开发专题系列,持续为大家带来更多有价值的WPS开发技术细节,如果能够帮助到您,请帮忙来个一键三连,更多问题请联系我(QQ:250325397) 目录 什么是FileUri 在SDK中的使用场景 打开文档时…

使用python将多张图片转为一个PDF

使用python将多张图片转为一个PDF 更新时间:20240418,亲测有用 用法1:传入的是图片路径列表 from PIL import Image import os# TODO 用法1,传入的是图片路径列表 def convert_images_to_pdf(image_paths, output_path):images…