Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >vue与react的数据绑定

vue与react的数据绑定

原创
作者头像
前端小tips
修改于 2021-11-25 10:46:58
修改于 2021-11-25 10:46:58
1.2K00
代码可运行
举报
文章被收录于专栏:前端文章小tips前端文章小tips
运行总次数:0
代码可运行

什么是单项绑定、双向绑定?

  • 单项绑定(例:react):顾名思义,就是将model值绑定至视图层,更新model时自动更新视图。
  • 双向绑定(例:vue):用户在视图层操作数据的同时,model也被更新了。

粗略地看,双向绑定免去了向model层插入数据的操作,简化了代码,提升了开发效率。是的,现在追求开发效率,很多公司都在使用vue来开发,v-model一加,舍我其谁?(逃

原理

VUE中双向绑定

vue2中使用Object.defineProperty()方法来进行数据劫持以及发布者- 订阅模式来实现双向绑定,数据劫持的时候会遍历每个属性,对每个属性加上get、set方法

实现原理就是

  1. 实现一个数据监听器Observer,能够对数据对象的所有属性进行监听,如有变动可拿到最新值并通知订阅者
  2. 实现一个指令解析器Compile,对每个元素节点的指令进行扫描和解析,根据指令模板替换数据,以及绑定相应的更新函数
  3. 实现一个Watcher,作为连接Observer和Compile的桥梁,能够订阅并收到每个属性变动的通知,执行指令绑定的相应回调函数,从而更新视图
  4. mvvm入口函数,整合以上三者

vue3中已经将双向绑定使用Proxy重写,解决了当年vue2不能监听数组变化的苦恼,同时也提升了效率。 Proxy的劫持手段则是官宣标准——直接监听data的所有域值,免去了Object.defineProperty循环遍历才能劫持每一个属性的hack。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //data is our source object being observedconst 
    observer = new Proxy(data, {
        get(obj, prop) { ... },
        set(obj, prop, newVal) { ... },
        deleteProperty() {
        //invoked when property from source data object is deleted
        }
    })

Proxy构造函数的第一个参数是原始数据data;第二个参数是一个叫handler的处理器对象。Handler是一系列的代理方法集合,它的作用是拦截所有发生在data数据上的操作。这里的get()和set()是最常用的两个方法,分别代理访问和赋值两个操作。在Observer里,它们的作用是分别调用dep.depend()和dep.notify()实现订阅和发布。直接反映在Vue里的好处就是:我们不再需要使用Vue.$set()这类响应式操作了。除此之外,handler共有十三种劫持方式,比如deleteProperty就是用于劫持域删除。

React中的单项数据流

react中对数据的概念是:数据的流向只能通过props由外层到内层 一层一层往里传递。

对于父子组件来说,父组件总是通过 Props 向子组件传递数据。所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外改变父级组件的状态,从而导致你的应用的数据流向难以理解。

当然,你在平时开发的时候真的是数据一层一层的从model流到layout到业务组件的吗? 那当然肯定不是的,业务组件层级搞起来了,那还玩个锤子?所以react加了个context这个东西,方便我们组件隔代通信。

优缺点

相比于vue一个:form="formData",react每次表单操作都需要手动更新state的值,这样给人一种哆嗦的感觉,代码书写上 VUE win。 但这里抛出一个问题: 数据每次变化时,视图都要更新吗?

单向数据流其实是没有状态的, 这使得单向绑定能够避免状态管理在复杂度上升时产生的各种问题, 程序的调试会变得相对容易。 双向绑定就显得复杂的很多,需要手动处理状态变化的逻辑, 例如子组件修改父组件,兄弟组件互相修改,使得程序复杂度上升, 难以调试, 当业务逻辑复杂时,就会无从下手。

参考: 剖析Vue原理&实现双向绑定MVVM

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
暂无评论
推荐阅读
编辑精选文章
换一批
到底该如何回答:vue数据绑定的实现原理?
这个题目本身不是特别难,只能说是作为社招的基础面试题,但是如果想回答好这道题也不是很容易。
前端迷
2021/04/09
1.1K0
到底该如何回答:vue数据绑定的实现原理?
vue双向数据绑定原理
目前几种主流的mvc(vm)框架都实现了单向数据绑定,而我所理解的双向数据绑定无非就是在单向绑定的基础上给可输入元素(input、textare等)添加了change(input)事件,来动态修改model和 view,并没有多高深。所以无需太过介怀是实现的单向或双向绑定。 实现数据绑定的做法有大致如下几种:
念念不忘
2019/03/29
2.3K0
vue双向数据绑定原理
vue中的双向数据绑定原理_vue nodejs
    每当面试官问到Vue数据双向绑定原理的时候,我们都会简单的说:Vue 内部通过 Object.defineProperty 方法属性拦截的方式,把data 对象里每个数据的读写转化成 getter / setter,当数据变化时通知视图更新。虽然一句话把大概原理概括了,但是其内部的实现方式还是值得深究的,本文就以通俗易懂的方式剖析 Vue 内部双向数据绑定原理的实现过程
全栈程序员站长
2022/11/08
1.8K0
剖析Vue原理&实现双向绑定MVVM
本文能帮你做什么? 1、了解vue的双向数据绑定原理以及核心代码模块 2、缓解好奇心的同时了解如何实现双向绑定 为了便于说明原理与实现,本文相关代码主要摘自vue源码, 并进行了简化改造,相对较简陋,并未考虑到数组的处理、数据的循环依赖等,也难免存在一些问题,欢迎大家指正。不过这些并不会影响大家的阅读和理解,相信看完本文后对大家在阅读vue源码的时候会更有帮助 本文所有相关代码均在github上面可找到 https://github.com/DMQ/mvvm 相信大家对mvvm双向绑定应该都不陌生了,一言不
小时光
2018/01/29
3.3K0
vue的双向绑定原理及实现_vue的数据绑定怎么实现
​ 所谓双向绑定,指的是vue实例中的data与其渲染的DOM元素的内容保持一致,无论谁被改变,另一方会相应的更新为相同的数据。(数据变化更新视图,视图变化更新数据)
全栈程序员站长
2022/11/02
1K0
Vue双向绑定原理,教你一步一步实现双向绑定
当今前端天下以 Angular、React、vue 三足鼎立的局面,你不选择一个阵营基本上无法立足于前端,甚至是两个或者三个阵营都要选择,大势所趋。
六小登登
2018/11/15
1K0
vue响应式原理(数据双向绑定的原理)
每个框架都不可避免会有自己的一些特点,从而会对使用者有一定的要求,这些要求就是主张,主张有强有弱,它的强势程度会影响在业务开发中的使用方式。
Javanx
2019/09/04
3K0
vue响应式原理(数据双向绑定的原理)
VUE
当 一 个 Vue 实 例 创 建 时 , Vue 会 遍 历 data 中 的 属 性 , 用 Object.defineProperty ( vue3.0 使 用 proxy ) 将 它 们 转 为 getter/setter,并且在内部追踪相关依赖,在属性被访问和修改时通知变化。 每个组件实例都有相应的 watcher 程序实例,它会在组
江拥羡橙
2023/11/27
4840
VUE
javascript基础修炼(9)——MVVM中双向数据绑定的基本原理
MVVM模型是前端单页面应用中非常重要的模型之一,也是Single Page Application的底层思想,如果你也因为自己学习的速度拼不过开发框架版本迭代的速度,或许也应该从更高的抽象层次去理解现代前端开发,因为其实最核心的经典思想几乎都是不怎么变的。关于MVVM的文章已经非常多了,本文不再赘述。
大史不说话
2018/12/12
1.2K0
Vue是如何实现数据的双向绑定的
Vue实现数据的双向绑定主要依赖于其内部的一套响应式系统,该系统结合了数据劫持、发布-订阅模式以及虚拟DOM等核心技术。以下是对Vue如何实现数据双向绑定的详细解析:
白衣少年
2024/11/22
4950
vue数据双向绑定原理-observer
​​ 1)vue 数据双向绑定原理-observer ​2)vue 数据双向绑定原理-wather​ 3)vue 数据双向绑定原理-解析器 Complie
chuchur
2022/10/25
8370
vue数据双向绑定原理-observer
19 道高频 vue 面试题解答(下)
指令本质上是装饰器,是 vue 对 HTML 元素的扩展,给 HTML 元素增加自定义功能。vue 编译 DOM 时,会找到指令对象,执行指令的相关方法。
bb_xiaxia1998
2022/10/10
2.1K0
vue的双向绑定原理及实现_vue双向绑定指令
以往的MVC模式是单向绑定,即Model绑定到View,当我们用JavaScript代码更新Model时,View就会自动更新
全栈程序员站长
2022/11/07
1.1K0
公司要求会使用框架vue,面试题会被问及哪些?
如果你是一个已经在学习前端开发的初学者亦或者是一名在代码界纵横多年的程序员,那你一定知道现在最火的前端框架之一Vue.js。它相比于React与Angular上手更加容易,或许这也是很多初学者选择vue的原因之一。
coder_koala
2019/07/30
2.6K0
公司要求会使用框架vue,面试题会被问及哪些?
2021vue面试题+答案
v-if 是真正的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建;也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。
zz1998
2021/07/05
8800
30 道 Vue 面试题,内含详细讲解(涵盖入门到精通,自测 Vue 掌握程度)
本文以前端面试官的角度出发,对 Vue 框架中一些重要的特性、框架的原理以问题的形式进行整理汇总,意在帮助作者及读者自测下 Vue 掌握的程度。本文章节结构以从易到难进行组织,建议读者按章节顺序进行阅读,当然大佬级别的请随意。希望读者读完本文,有一定的启发思考,也能对自己的 Vue 掌握程度有一定的认识,对缺漏之处进行弥补,对 Vue 有更好的掌握。文章最后一题,欢迎同学们积极回答,分享各自的经验 ~~~
Nealyang
2019/09/29
1.7K0
30 道 Vue 面试题,内含详细讲解(涵盖入门到精通,自测 Vue 掌握程度)
不要再搞混Vue的响应式原理和双向数据绑定了
之前公司招人,面试了一些的前端同学,因为公司使用的前端技术是Vue,所以免不了问到其响应式原理和Vue的双向数据绑定。但是这边面试到的80%的同学会把两者搞混,通常我要是先问响应式原理再问双向数据绑定原理,来面试的同学大都会认为是一回事,那么这里我们就说一下二者的区别。
PHP开发工程师
2022/07/19
4640
前端一面经典vue面试题(持续更新中)
只需要在组件即将被销毁的生命周期 componentWillUnmount (react)中在 LocalStorage / SessionStorage 中把当前组件的 state 通过 JSON.stringify() 储存下来就可以了。在这里面需要注意的是组件更新状态的时机。
bb_xiaxia1998
2022/12/07
1.1K0
【Vuejs】778- 超全 Vuejs 知识点(基础到进阶)
https://juejin.im/post/5ec358126fb9a0432a3c49e6
pingan8787
2020/11/19
3.5K0
【Vuejs】778- 超全 Vuejs 知识点(基础到进阶)
前端高频vue面试题总结3
通过webpack的tree-shaking功能,可以将无用模块“剪辑”,仅打包需要的
bb_xiaxia1998
2023/01/05
1.3K0
推荐阅读
相关推荐
到底该如何回答:vue数据绑定的实现原理?
更多 >
交个朋友
加入前端学习入门群
前端基础系统教学 经验分享避坑指南
加入腾讯云技术交流站
前端技术前沿探索 云开发实战案例分享
加入前端趋势交流群
追踪前端新趋势 交流学习心得
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档