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

Vue中data和props数据代理的区别

data 和 props 的代理方式虽然类似(都通过 Object.defineProperty 定义在实例上),但 data 的属性是 “可枚举” 的,而 props 的属性是 “不可枚举” 的,这导致打印实例时 props 不会被默认显示出来。

一、enumerable 特性的差异

JavaScript 中,Object.defineProperty 定义属性时,有一个 enumerable 配置项:

  • enumerable: true:属性可枚举(会出现在 for...in 循环、console.log 打印对象时)。
  • enumerable: false:属性不可枚举(默认不显示,需手动访问才可见)。

Vue 在代理 data 和 props 时,对 enumerable 的设置不同:

  • data 的代理enumerable: true → 打印实例时会显示。
  • props 的代理enumerable: false → 打印实例时默认不显示。

二、为什么要这样设计?

  1. 区分内部状态和外部输入data 是组件的 “内部状态”,Vue 希望开发者能直观看到;而 props 是 “外部输入”,设计为不可枚举可以避免实例属性列表过于混乱,也暗示了 props 的 “只读” 特性(不鼓励直接操作)。

  2. 避免遍历冲突:若 props 和 data 有同名属性(虽然不推荐,但语法允许),data 会覆盖 props(Vue 会警告)。将 props 设为不可枚举,可以避免 for...in 遍历实例时出现重复或冲突的属性。

三、props 的响应式处理

  • props 的响应式本质依赖于父组件中对应数据的响应式。因为 props 是父组件传递过来的值,若父组件中该值是响应式的(如父组件的 data 或另一个 props),则子组件的 props 会 “继承” 这种响应式 —— 当父组件修改该值时,子组件的 props 会自动更新,并触发子组件的重新渲染。
  • 子组件内部并不会像 data 那样对 props 进行完整的 “劫持”(比如不会在子组件内部为 props 重新定义 getter/setter 来监听修改),因为 props 的修改权限在父组件,子组件直接修改 props 不会触发响应式更新(甚至会报错)。

总结

data 和 props 都通过代理挂载到实例上,支持 this.xxx 访问,但:

  • data 的代理属性 可枚举enumerable: true),因此打印实例时可见。
  • props 的代理属性 不可枚举enumerable: false),因此打印实例时默认隐藏,需手动访问才可见。
http://www.dtcms.com/a/528174.html

相关文章:

  • C++容器queue
  • 运转灵活小企业网站建设wordpress文章布局
  • 网站网页框架构架图怎么做大理网站开发
  • Cliproxy与Adspower指纹浏览器:跨境业务安全与效率的双重引擎
  • 在线观看免费网站网址开源之家
  • AI降重软件开发方案:基于Python的文本语义重构系统
  • 小杰-自然语言处理(seven)——transformer系列——自注意力(self-attention)
  • 带代码示例的 HTML 标签实操手册
  • fastapi 前端文件配置 python fastapi服务添加前端打包好的静态文件
  • 计算机网络自顶向下方法3——详解分组交换时延、丢包、吞吐量
  • 外贸 网站推广青岛胶南市城乡建设局网站
  • GitHub等平台形成的开源文化正在重塑推荐人
  • webrtc代码走读(六)-QOS-FEC冗余度配置
  • F036 vue+flask中医热性药知识图谱可视化系统vue+flask+echarts+mysql
  • 电脑效能跃升利器 金士顿KVR内存焕新机
  • Bootstrap UI 编辑器
  • MySQL联合查询详解
  • webrtc代码走读(五)-QOS-FEC原理
  • 车载诊断架构 ---DTC快照中DID大小顺序是怎么要求的?
  • Windows 10 下 VS Code 配置 C++ 开发环境(MinGW)
  • 天津低价网站建设怎样做淘宝联盟的网站
  • 福建网站建建设方案太原关键词优化报价
  • 深耕 Rust:核心技术解析、生态实践与高性能开发指南
  • 深入浅出 Tokio 源码:掌握 Rust 异步编程的底层逻辑
  • 北京网站建设管庄1天学会搭建营销网站
  • 基于SEH的异常捕获与MiniDumpWriteDump深度解析
  • C语言练习题
  • Postman应用实战
  • Vue-Loader 深度解析:原理、使用与最佳实践
  • HCIP第二次作业(VRRP/STP/VLAN/Eth-trunk/NAT)