问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

vue数据双向绑定的原理+响应式原理

发布网友 发布时间:2022-12-05 05:38

我来回答

1个回答

热心网友 时间:2023-11-17 20:01

https://my.oschina.net/u/4386652/blog/4281447
双向绑定:
数据变化更新视图 view => model利用Object.defineProperty的get、set函数对数据更改、读取进行监听。如果数据改变就通知watcher进行重新渲染页面
视图变化更新数据 model => view 利用事件监听,通过target.value拿到新值赋值给data

数据变化更新视图关键在于 如何知道数据发生了变化,数据变化了通知视图进行更新
让数据变得能监测,需要使用Object.defineProperty中的get、set函数
let car = {}
let val = 3000
Object.defineProperty(car, 'price', {
get(){
console.log('price属性被读取了')
return val
},
set(newVal){
console.log('price属性被修改了')
val = newVal
}
})
car.price = 4000 设置属性值会进入set方法
console.log(car.price) 读取属性值会进入get方法
Object.defineProperty通过对数据读取和设置进入的get、set函数对数据进行了监听

响应式原理:
每个组件实例都对应一个 watcher 实例,它会在组件渲染的过程中把“接触”过的数据 property 记录为依赖。之后当依赖项的 setter 触发时,会通知 watcher,从而使它关联的组件重新渲染。

思考:
get函数好像意义不大
发布者、订阅者不能很好理解

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
垆土铁棍山药的地理标志原产地在哪里 怀山药中的极品——温县垆土地铁棍山 垆土铁棍山药的道地源产地是哪里 温县垆土铁棍山药的三大特点 二次元综漫完结小说,400万字 八百章 4000k以上,至少4本,男主 谁有二次元变身百合小说 有意义的微信头像 养老金2019年11月份拿的7月底涨钱了,2020年二月份拿的为什么没挣钱? 延迟领养老金 微软的Teams为什么要自动启动 对方微信限额了还可以给对方转账吗? 比亚迪宋dm能用机械钥匙起动车子吗? 比亚迪宋pro几把车钥匙 比亚迪宋pro机械钥匙怎么拿出来 比亚迪宋pro机械钥匙在哪里? 比亚迪宋pro有机械钥匙吗 原生缸特别细的河沙能用吗 鱼缸长100、宽35、高60、底沙用建筑用河沙可以么?需要多少?用多大颗 ... 身上像插了许多扇子的鱼叫什么 华为数通售前l2难不难 木质发簪样式图片欣赏_木质发簪图片 佳能A1000的简介 联想平板7英寸a1000怎么样 电脑上的豌豆荚里怎么下软件 豌豆视频老版本怎么下载 录音压缩器能边录音边压缩吗 iPhone怎么查询是否为国行? 游泳与美人鱼的区别 美人鱼水下技巧有哪些 为什么美人鱼会游泳 Vue基础-响应式原理 Vue 深入响应式原理 开具公司纳税证明怎么开 企业纳税证明如何办理 企业地税纳税证明怎么开 网络的传输方式 面对现在我国很多人都过圣诞节情人节等西方节日你有什么看法 mate10和mate20电池通用的吗 ae音频移到另一个盘视频就没有声音了 微信发视频很慢发不出怎么回事 6=六等于几再等于几? 我家6等于几 我想知道6+12等于几? 怎样给0-18岁的孩子做催眠? 常说,哪些语言能催眠孩子,使其变得优秀 苹果:后乔布斯时代,属于另一个人的传奇 蒂姆·库克:一个被低估的苹果继任者 苹果CEO蒂姆·库克再度来京,这两天都去了哪儿? 农村房屋三证是哪三证 文艺范儿夜店开业祝福语(精选24句)