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

前端八股整理|VUE|高频小题 01

前端八股整理|VUE|高频小题 01

1.proxy的原理了解过吗,是怎么用它实现数据响应式的?proxy的缺点?

Proxy 是 JS 提供的一个“代理器”。不直接操作原对象,而是操作它的代理对象;当你读、写、删、判断属性时,Proxy 可以先拦截一下。

比如有一个对象:

constuser={name:'xiao',age:18}

正常情况下你这么访问:

console.log(user.name)user.age=20

如果给它套一层 Proxy:

constproxyUser=newProxy(user,{get(target,key){console.log('有人读取了',key)returntarget[key]},set(target,key,value){console.log('有人修改了',key,value)target[key]=valuereturntrue}})

此时再操作,就会先进入你写的 get 和 set。

console.log(proxyUser.name)proxyUser.age=20

1.1 proxy的原理

proxy的原理,通过语言层面提供的拦截机制,把对对象的操作劫持下来,在你读取或者修改这个数据的时候,先给到代理对象.代理对象有 get 或者 set 方法去操作这个对象

new Proxy(obj, {handler})

  • obj 就是你要代理的对象
  • handler 就是一些操作处理,比如 get set

get set 方法中存在target, key, value

  • target 就是代理的对象
  • key 修改或者访问的属性名
  • value 就是修改的属性值
constobj={name:'xiao',age:18}constp=newProxy(obj,{...})p.age=20//target 就是 obj//key 就是 age// value 就是 20//这是都是自动的

1.2 怎么用proxy实现数据响应式

get 时收集依赖,set 时触发更新

Vue3 利用 Proxy 对对象进行代理,本质上是拦截对象的读取和修改行为。读取属性时会触发 get,Vue 会在这里做依赖收集,记录当前属性被哪些副作用函数使用了;修改属性时会触发 set,Vue 会找到之前收集到的依赖并触发它们重新执行。这样数据一变,依赖它的渲染逻辑就会重新运行,页面也就跟着更新了。所以 Proxy 只是拦截手段,真正实现响应式的关键是get 时收集依赖,set 时触发更新

1.3 proxy的缺点

  • 兼容性不如 Object.defineProperty
  • Proxy 不是把原对象本身“改造”了,而是在原对象外面套了一层代理壳,所以它不是吧 obj变成了自带响应式的对象,如果把原对象传来传去会绕开响应式
  • 解构后可能丢响应式,基于 Proxy 做响应式时常见的坑
conststate=reactive({count:0})const{count}=state

这时候 count 就变成普通值了,不再走代理。

所以会出现:

  • 直接用 state.count 有响应式
  • 解构出来后没响应式

1.4 ref和reactive的区别

reactive 底层核心是基于 Proxy 实现的,它适合直接代理对象,通过拦截对象属性的读取和修改来完成依赖收集和触发更新。

而 ref 更适合基本类型,它不是直接对基本类型做 Proxy,因为 Proxy 只能代理对象。ref 的思路是把值包装成一个带 value 属性的对象,再让这个对象具备响应式能力,所以使用时需要通过 .value 访问。

所以在用reactive 的时候 不用.value,但是 ref 需要

http://www.jsqmd.com/news/616846/

相关文章:

  • 工业机器人离线编程与仿真
  • Blazor 中用Scoped全局变量存放用户权限(Blazor囫囵吞枣7)
  • 分享10款答辩AI工具及模板体验,aibiye等神器助你高效完成答辩。
  • 等离子处理机选型指南:从工艺需求到方案落地
  • 高密目前靠谱的软装馆
  • 分析车辆电耗变化情况
  • FLUX.1-dev-fp8-dit文生图+SDXL_Prompt风格应用:短视频平台竖版海报AI生成
  • Graphormer模型部署避坑指南:从Ubuntu系统配置到服务上线
  • 2026年第二季度数字地磅靠谱供应商盘点:矿山智能称重系统、矿用地磅、移动地磅、自动计量智能称重系统、车牌识别智能称重系统选择指南 - 优质品牌商家
  • 科哥定制版SenseVoice:简单易用的语音转文字工具部署指南
  • AI模型在.NET 11中卡顿?揭秘JIT预编译、内存池复用与TensorRT桥接的3层加速链,上线即提效217%
  • 宝塔面板网站出现MySQL连接超时丢失怎么解决_合理增大max_allowed_packet和超时等待参数
  • STEP3-VL-10B从零开始:Ubuntu环境部署+Gradio启动+API服务验证全流程
  • 开源大模型实战:StructBERT中文句子相似度工具在舆情监测中的关键词语义泛化应用
  • MedGemma医疗助手:5分钟本地部署,打造你的专属AI医生
  • FastAPI实战:WebSocket vs Socket.IO,这回真给我整明白了!邑
  • 工业水质快检试剂盒怎么选?这家国产品牌值得关注
  • Ollama本地模型管理与Nanbeige 4.1-3B云服务的混合架构实践
  • 春秋云境-CVE-2025-14989
  • 【毕设选题】智能实验室监控系统:ESP32 + 多传感器 + MQTT
  • HunyuanVideo-Foley 系统资源监控与清理:解决C盘空间不足的实战技巧
  • AIGlasses OS Pro 应用案例集:智能眼镜视觉辅助的多种可能
  • Pixel Mind Decoder 创意应用展示:AI 驱动的情感化故事生成器
  • Face Swap API 集成与使用指南
  • 下一代商用计算机(NGCC)技术架构白皮书(能力和工程要求)
  • ESPS USB MSC 调试全过程记录氏
  • Qwen3-ASR-0.6B隐私计算实践:本地ASR+本地大模型摘要,全程不触网的数据闭环
  • 亲测有效!雪女-斗罗大陆-造相Z-Turbo生成角色细节展示:服装、发型、神态都很到位
  • YOLOE镜像新手入门:从零到一,轻松玩转文本/视觉提示检测
  • 「鸿蒙智能体实战记录 09」贺词工作流接入:卡片绑定与快捷指令配置实现