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

MVVM框架

MVVM由以下三个内容构成:

  • Model:数据模型
  • View:界面
  • ViewModel:作为桥梁负责沟通View和Model

在JQuery时期,如果需要刷新UI,需要先取到对应的 DOM 再更新 UI,这样数据和业务的逻辑就和⻚⾯有强耦合。

在 MVVM 中,UI 是通过数据驱动的,数据⼀旦改变就会相应的刷新对应的UI,UI如果改变,也会改变对应的数据。这种⽅式就可以在业务处理中只关⼼数据的流转,⽽⽆需直接和页面打交道。ViewModel 只关⼼数据和业务的处理,不关⼼ View 如何处理数据,在这种情况 下,View 和 Model 都可以独⽴出来,任何⼀⽅改变了也不⼀定需要改变另⼀⽅,并且可以将⼀些可复⽤的逻辑放在⼀个 ViewModel 中,让多个 View 复⽤这个 ViewModel。 在 MVVM 中,最核⼼的也就是数据双向绑定,例如 Angluar 的脏数据检测,Vue2中的数据劫持。

脏数据检测

当触发了指定事件后会进⼊脏数据检测,这时会调⽤ $digest 循环遍历所有的数据观察者, 判断当前值是否和先前的值有区别,如果检测到变化的话,会调⽤ $watch 函数,然后再次调⽤ $digest 循环直到发现没有变化。循环⾄少为⼆次 ,⾄多为⼗次。

脏数据检测虽然存在低效的问题,但是不关⼼数据是通过什么⽅式改变的,都可以完成任务,但是这在 Vue 中的双向绑定是存在问题的。并且脏数据检测可以实现批量检测出更新的值,再去统⼀更新 UI,⼤⼤减少了操作 DOM 的次数,所以低效也是相对的。

数据劫持

Vue2 内部使⽤了 Object.defineProperty() 来实现双向绑定,通过这个函数可以监听到 set 和 get 的事件。

Object.defineProperty 虽然已经能够实现双向绑定了,但是他还是有缺陷的。

1. 只能对属性进⾏数据劫持,所以需要深度遍历整个对象

2. 对于数组不能监听到数据的变化

虽然 Vue 中确实能检测到数组数据的变化,但是其实是使⽤了 hack 的办法,并且也是有缺陷的。

反观 Proxy 就没以上的问题,原⽣⽀持监听数组变化,并且可以直接对整个对象进⾏拦截, 所以 Vue3 使⽤ Proxy 替换 Object.defineProperty

http://www.lryc.cn/news/485712.html

相关文章:

  • 数据仓库在大数据处理中的作用
  • 前端Javascript、Vue、CSS等场景面试题目(二)
  • 鸿蒙学习生态应用开发能力全景图-开发者支持平台(5)
  • 计算机网络各层设备总结归纳(更新ing)
  • 3. Spring Cloud Eureka 服务注册与发现(超详细说明及使用)
  • 品牌如何利用大数据工具,进行消费者洞察分析?
  • 鸿蒙实现 web 传值
  • uniapp vuex的使用
  • RabbitMQ实战启程:从原理到部署的全方位探索(上)
  • 【论文复现】轻松利用自适应特征融合实现去雾
  • 【大数据学习 | HBASE高级】hbase-phoenix 与二次索引应用
  • 高级java每日一道面试题-2024年11月09日-缓存中间件篇-Redis和Memecache有什么区别?
  • vscode 关闭绑定元素 隐式具有“any”类型这类错误
  • 手机ip地址异常怎么解决
  • 【售前方案】工业园区整体解决方案,智慧园区方案,智慧城市方案,智慧各类信息化方案(ppt原件)
  • 37.超级简易的计算器 C语言
  • 防火墙----iptables
  • 若点集A=B则A必能恒等变换地变为B=A这一几何常识推翻直线(平面)公理
  • 网络安全之WINDOWS端口及病毒编写
  • Flink 开发工程应加载哪些依赖
  • wordpress建外贸独立站常用的多语言插件
  • [SpB]如何开始使用 Spring Boot?
  • 蓝桥杯模拟
  • 数字化转型企业架构设计手册(交付版),企业数字化转型建设思路、本质、数字化架构、数字化规划蓝图(PPT原件获取)
  • 2. langgraph中的react agent使用 (在react agent添加历史消息)
  • MySQL社区版的启动与连接
  • 【图像压缩感知】论文阅读:Content-Aware Scalable Deep Compressed Sensing
  • 物理hack
  • Linux——环境基础开发工具使用2(正在更新中...)
  • STM32传感器模块编程实践(十二) micro SD卡模块简介及驱动源码