位置: 编程技术 - 正文

浅谈vue,angular,react数据双向绑定原理分析(浅谈如何培养孩子的注意力)

编辑:rootadmin

推荐整理分享浅谈vue,angular,react数据双向绑定原理分析(浅谈如何培养孩子的注意力),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:浅谈一下新冠的好处,浅谈建筑地基基础加固施工技术亲,浅谈小学低年级语文教学论文,浅谈小学低年级语文教学论文,浅谈特殊儿童的融合教育论文,浅谈小学低年级语文教学论文,浅谈是什么意思,浅谈是什么意思,内容如对您有帮助,希望把文章链接给更多的朋友!

传统做法

前端维护状态,手动操作DOM更新视图。前端框架对服务器数据通过模版进行渲染。当用户产生了一个动作之后,我们通过document.getElementBy... 手动进行DOM更新。 框架帮忙分离数据和视图,后续状态更新需要手动操作DOM,因为框架只管首次渲染,不追踪状态监听变化。

双向数据绑定

当我们在前端开发中采用MV*的模式时,M - model,指的是模型,也就是数据,V - view,指的是视图,也就是页面展现的部分。通常,我们需要编写代码,将从服务器获取的数据进行“渲染”,展现到视图上。每当数据有变更时,我们会再次进行渲染,从而更新视图,使得视图与数据保持一致。

页面也会通过用户的交互,产生状态、数据的变化,这个时候,我们则编写代码,将视图对数据的更新同步到数据,以致于同步到后台服务器。也就是

不同的前端 MV* 框架对于这种 Model 和 View 间的数据同步有不同的处理。在 Backbone 中,Model 到 View 的数据传递,可以在 View 中监听 Model 的 change 事件,每当 Model 更新,View 中重新执行 render。而 View 到 Model 的数据传递,可以监听 View 对应的 DOM 元素的各种事件,在检测到 View 状态变更后,将变更的数据发送到 Model(通过两边的监听事件)。相较于 Backbone,AngularJS 所代表的 MVVM 框架则更进一步,从框架层面支持这种数据同步机制,而且是双向数据绑定:

在不同的 MVVM 框架中,实现双向数据绑定的技术有所不同。

AngularJS 采用“脏值检测”的方式,数据发生变更后,对于所有的数据和视图的绑定关系进行一次检测,识别是否有数据发生了改变,有变化进行处理,可能进一步引发其他数据的改变,所以这个过程可能会循环几次,一直到不再有数据变化发生后,将变更的数据发送到视图,更新页面展现。如果是手动对 ViewModel 的数据进行变更,为确保变更同步到视图,需要手动触发一次“脏值检测”。

浅谈vue,angular,react数据双向绑定原理分析(浅谈如何培养孩子的注意力)

VueJS 则使用 ES5 提供的 Object.defineProperty() 方法,监控对数据的操作,从而可以自动触发数据同步。并且,由于是在不同的数据上触发同步,可以精确的将变更发送给绑定的视图,而不是对所有的数据都执行一次检测。

Vue 双向数据绑定实现

数据与视图的绑定与同步,最终体现在对数据的读写处理过程中,也就是 Object.defineProperty() 定义的数据 set、get 函数中。Vue 中对于的函数为 defineReactive,在精简版实现中,我只保留了一些基本特性:

在对数据进行读取时,如果当前有 Watcher(对数据的观察者,watcher 会负责将获取的新数据发送给视图),那将该 Watcher 绑定到当前的数据上(dep.depend(),dep 关联当前数据和所有的 watcher 的依赖关系),是一个检查并记录依赖的过程。而在对数据进行赋值时,如果数据发生改变,则通知所有的 watcher(借助 dep.notify())。这样,即便是我们手动改变了数据,框架也能够自动将数据同步到视图。

数据绑定关系的识别过程

Vue 和 AngularJS 中,都是通过在 HTML 中添加指令的方式,将视图元素与数据的绑定关系进行声明

以上的 HTML 代码表示该 input 元素与 name 数据进行绑定。在 JS 代码中可以这样进行初始化:

代码正确执行后,页面上 input 元素对应的位置会显示上面代码中给出的初始值:sysuzhyupeng。

执行 vm.name = ‘zhyupeng' 后,页面上 input 也会更新为显示: zhyupeng。在页面文本框中修改内容为:yupeng,则通过vm.name 获取的值为:'yupeng'

React数据绑定

React采用这种方式,考虑虚拟DOM树的更新:

属性更新,组件自己处理 结构更新,重新“渲染”子树(虚拟DOM),找出最小改动步骤,打包DOM操作,给真实DOM树打补丁

单纯从数据绑定来看,React虚拟DOM没有数据绑定,因为setState()不维护上一个状态(状态丢弃),谈不上绑定

从数据更新机制来看,React类似于提供数据模型的方式(必须通过state更新)

没有双向数据绑定的话,input的双向场景要怎么实现?通过框架提供的API,手动通知数据变化,和操作DOM的方式很像

标签: 浅谈如何培养孩子的注意力

本文链接地址:https://www.jiuchutong.com/biancheng/378930.html 转载请保留说明!

上一篇:vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法(vue中使用类class)

下一篇:解析Vue 2.5的Diff算法(vue3.0diff)

  • 商品混凝土税率为啥是3%
  • 只报个税不交社保有什么税务风险
  • 小规模纳税人怎么办理
  • 个人所得税征收范围及税率
  • 增值税无票收入可以抵扣
  • 属于企业期间费用的有
  • 增值税申报失败怎么撤销
  • 固定资产折旧年限的最新规定2022
  • 进项留底怎么做账
  • 河道维护中心职责
  • 压覆矿产赔偿标准法律依据
  • 非公益性捐赠支出是永久性差异吗
  • 小规模纳税人专票开1%还是3%
  • 公司开出的经济补偿金可以税前扣除吗
  • 普票抵扣税
  • 供暖税收分类编码是多少
  • 不得核定征收企业所得税的行业
  • 定金转为货款金额需要特别约定吗?
  • 制造费用包括劳动保护费吗
  • 商品折扣与折让属于销售费用吗
  • 通用申报表工会经费可以不申报吗
  • 小米路由器启动不了
  • 应交税费在借方是进项还是销项
  • 辅助生产车间照明用电计入哪个科目
  • 没收到电费账单怎么办
  • 分公司 股东
  • 厂家赠送的商品如何走账
  • 微软正在更新office
  • 压缩模制
  • 汇算清缴哪些表必填
  • 用友结算成本处理的作用
  • 缴住房公积金会计分录怎么写
  • 在windows中安装应用程序的途径
  • 资产负债表中各项目的期末数应根据各账户
  • 保险补偿金额的计算
  • 办公经费包括工资吗
  • 基于javaweb是什么意思
  • 微信小程序实现支付功能
  • VUE3.2 + vue-echarts + DataV 数据可视化大屏(项目)
  • js解构赋值浏览器报错
  • resize2fs命令 同步文件系统容量到内核
  • php.ini中date.timezone设置详解
  • 职工教育经费是否可以抵扣进项税
  • 2022年windows11windows10最强VMware Workstation 16 Pro for Windows虚拟机软件最新授权版16.2.3-19376536版本
  • 股东转让股份会退股吗
  • 购置固定资产支付的现金属于投资活动产生的现金流量吗
  • php前台模板
  • 企业所得税季报资产总额季初季末
  • 劳务派遣公司开票内容写什么
  • 背书是什么含义
  • 商场一般是怎么缴纳租金的
  • 运输费用增值税税率9%
  • 农产品加计扣除1%账务处理
  • 关停企业的国家规定
  • 承兑汇票需要做账吗
  • 给公司股东分红的账务处理
  • 消防设备的安装
  • 填写记账凭证内容摘要的三个要素
  • mysql字段超长
  • sql游标用法
  • 如何将苹果手机复制
  • 同一个局域网中,可以有两台dhcp服务器吗?为什么?
  • 联想yogas
  • 如何配置linux系统
  • 怎么解圧
  • 写出linux相关命令及用法
  • [置顶] [寒江孤叶丶的Cocos2d-x之旅_27]CocoStudio导出的LUA文件怎么使用?
  • python中的变量赋值
  • 用python进行图像处理
  • unity3ds
  • jquery渐变效果
  • js中的eval
  • 国家税务局上的电子发票如何作废
  • 掌上海关怎么查询
  • 公对私转账怎么开票
  • 公积金提取需要几个工作日
  • 陕西个体户免税政策
  • 国家税务总局云平台网址
  • 苏州吴江区事业单位2023成绩公布
  • 一次性收入多少要交个人所得税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设