MVC与双向绑定与单向绑定

本文探讨了前端开发中的MVC模式,解释了模型-视图-控制器的职责,并通过例子展示了如何简化代码。接着,文章深入讨论了双向绑定的概念,分析了Vue的实现及其优势。相比之下,React采用单向数据流,解决了跨组件数据共享的问题。最后,文章总结了单向和双向绑定的应用场景,推荐在用户数据管理中使用单向绑定,而在UI交互中使用双向绑定,并提及了单向绑定的实现如Redux和虚拟DOM,以及双向绑定的实现方式,如AngularJS的脏检查、Vue的响应式系统和Proxy。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上次的笔记:MVC&MVVM

MVC 思想(前端)

  • model 只负责存储数据、请求数据、更新数据
  • view 只负责渲染 HTML(可接受一个 data 来定制数据)
  • controller 负责调度 model 和 view

例子1:https://jsbin.com/yuwopuf/3/edit?js,output

模板代码(也就是类)

一个页面或模块只需要 model view controller 三个对象
第二个页面就需要再来 model2 view2 controller2 三个对象
第三个页面就需要再来 model3 view3 controller3 三个对象
……
第N个页面就需要再来 modelN viewN controllerN 三个对象

进化:把重复的代码写到一个类(class)里面
之前的笔记:面向对象

例子2:https://jsbin.com/sodojac/5/edit?js,output

双向绑定

上例还是有一些问题:

  • 每次用 model 获取数据之后,还要「手动」渲染HTML
  • 每次 render 都会更新 整个#app 的 innerHTML,这可能会丢失用户的写在页面某个 input 里面的数据。

解决办法:

  • 用户只要输入了什么,就记录在 JS 的 data 里。(数据绑定的初步思想出现了)
  • 不要粗暴的操作 innerHTML,而是只更新需要更新的部位(虚拟 DOM 的初步思想出现了)

还有人提出:
events 能不能直接写到 HTML 上面,而不是写到 JS 里。这样写代码更直观。
(与内容与行为分离的观点相冲突。这种争论到 2017 年才渐渐休止,大家逐渐都接受了直接在 HTML 上绑定 JS 事件的写法。)

Vue 的双向绑定

这里写图片描述
双向绑定:
改DOM,自动映射到内存。
改内存,自动映射到DOM。

vue还实现了局部更新,并且代替了Controller

React 的单向绑定

双向绑定在遇到跨组件,父子组件共用一个data时,有些问题。

React 的单向绑定:
这里写图片描述

总结

换一句话说:
单向绑定:半自动的双向绑定
双向绑定:全自动的双向绑定

推荐
用户数据(mysql):用单向绑定
UI数据:双向绑定

拓展(要点):
单向绑定:redux 虚拟DOM。
双向绑定实现方式:

  • Dirty Checking(AngularJS 1.x)的方式
  • Reactive (vue)

    • 使用 getter setter,(在setter里面更新dom),缺点是无法监听不存在的属性
    • 使用 Proxy
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值