首页 > 其他分享 >vue3面试题

vue3面试题

时间:2024-08-12 15:09:07浏览次数:9  
标签:面试题 对象 响应 API Proxy vue3 defineProperty 属性

1. Vue3.0 里为什么要用 Proxy API 替代 defineProperty API?—— 响应式优化(高频,重点!!!)Vue更新的重点。

  • defineProperty API 的局限性最大原因是它只能针对单例属性做监听。
    • Vue2 中的响应式实现正是基于 defineProperty 中的 descriptor,对 data 中的属性做了遍历 + 递归,为每个属性设置了 getter、setter。
    • 这也就是为什么 Vue 只能对 data 中预定义过的属性做出响应的原因,在 Vue 中使用下标的方式直接修改属性的值或者添加一个预先不存在的对象属性是无法做到 setter 监听的,这是 defineProperty 的局限性。
  • Proxy API 的监听是针对一个对象的,那么对这个对象的所有操作会进入监听操作, 这就完全可以代理所有属性,将会带来很大的性能提升和更优的代码。
    • Proxy 可以理解成,在目标对象之前架设一层 “拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。

响应式是惰性的

  • 在 Vue2 中,对于一个深层属性嵌套的对象,要劫持它内部深层次的变化,就需要递归遍历这个对象,执行 Object.defineProperty 把每一层对象数据都变成响应式的,这无疑会有很大的性能消耗。
  • 在 Vue3 中,使用 Proxy API 并不能监听到对象内部深层次的属性变化,因此它的处理方式是在 getter 中去递归响应式,这样的好处是真正访问到的内部属性才会变成响应式,简单的可以说是按需实现响应式,减少性能消耗。

基础用法:

let datas = {
num: 0
}
let proxy = new Proxy(datas, {
get(target, property) {
return target[property]
},
set(target, property, value) {
target[property] += value
}
})

 

 

标签:面试题,对象,响应,API,Proxy,vue3,defineProperty,属性
From: https://www.cnblogs.com/meiyanstar/p/18354970

相关文章

  • 最新Java面试题及答案(500道)
    第一章-Java基础篇Object中有哪些方法   难度系数:⭐protectedObjectclone()--->创建并返回此对象的一个副本。booleanequals(Objectobj)--->指示某个其他对象是否与此对象“相等protectedvoidfinalize()--->当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃......
  • 高级.NET Core分布式事务相关的面试题
    以下是一些高级.NETCore分布式事务相关的面试题,这些问题涵盖了概念、实际应用以及最佳实践,可以帮助评估候选人在分布式事务方面的理解和实际操作能力。1.分布式事务的基本概念与.NETCore支持什么是分布式事务?它与本地事务有何不同?.NETCore中有哪些常用的分布式事务解决方......
  • 关于异步编程和多线程的高级.NET Core面试题
    以下是一些关于异步编程和多线程的高级.NETCore面试题。这些问题涵盖了从基础概念到复杂应用的各个方面,可以帮助评估候选人在异步编程和多线程开发方面的能力。1.异步编程基础在.NETCore中,异步编程的基本原理是什么?async和await关键字的作用是什么?如何在.NETCore中使用......
  • 038.Vue3入门,使用keep-alive让组件保持存活
    1、App.vue代码如下:<template><button@click="change">切换组件</button><p></p><keep-alive><component:is="tabComponent"></component></keep-alive></template><scr......
  • 037.Vue3入门,动态组件
    1、App.vue代码如下:<template><component:is="tabComponent"></component><button@click="change">切换组件</button></template><script>importChild1from"./view/Child1.vue"importChi......
  • 036.Vue3入门,组件的生命周期
    1、App.vue代码如下:<template><div><h3>主页面</h3><button@click="change">改变</button></div></template><script>exportdefault{beforeCreate(){console.log('beforeCreate&#......
  • 034.Vue3入门,插槽Slot中同时显示主页面和插槽页面的内容
    1、App.vue代码:<template><div><h3>主页面</h3><Slot001v-slot="slotProps"><h4>{{msg}}==={{slotProps.msg}}</h4></Slot001></div></template><script>i......
  • 035.Vue3入门,使用具名插槽Slot中,同时显示主页面和多个插槽页面内容
    1、App.vue代码如下:<template><div><h3>主页面</h3><Slot001><template#s1="slotProps"><h4>{{msg}}==={{slotProps.msg1}}</h4></template><template#s2......
  • Java面试题--数据库集群
    Mysql主从解决什么问题,不能解决什么问题?MySQL主从同步,主负责写,从负责读,使用一主多从,能减轻读的压力但是这不能解决写的压力和主库的单点故障,如果主库的写并发高,可以做成多个主库MySql主从复制原理?主要依靠binlog来实现的,它记录的是所有的DDL,DML,TCL操作当主库的数据发生改......
  • 033.Vue3入门,多个插槽Slot的命名调用和#号简写
    1、App.vue代码如下:<template><div><h3>插槽学习</h3><Slot001><!--插槽1--><templatev-slot:s2><p>{{msg1}}</p></template><!--插槽2--><......