Vue和React的区别

今天小编来带大家复习一下Vue 和React的区别

1 两者的共同点

        数据驱动视图

        组件话开发的思想

        采用虚拟Dom 进行渲染 Virtual DOM

2 不同点:

        核心思想不同

        写法的差异

        diff 算法的不同

        响应式原理的不同

        源码的差异

下面我们来讲解一下这两种框架的共同电:

1.数据驱动视图

                在过去使用jqury的时代,我们需要频繁的操作dom 来实现页面与效果的交互,而Vue和react 则解决了这一痛点:采用数据驱动视图的方式隐藏Dom 的频繁操作,所以我们在开发事只需要关注数据变化即可,但是两者实现的方式不同

2.组件化

        在vue和react中都遵循组件话开发的思想,他们把框架放在Ui层面,将页面分成一下细块,这写块就是组件之间的组合,潜逃就形成了最后的网页页面

Virtual DOM 

        

Vue与React都使用了 Virtual DOM + Diff算法, 不管是Vue的Template模板+options api 写法, 还是React的Class或者Function写法,最后都是生成render函数,而render函数执行返回VNode(虚拟DOM的数据结构,本质上是棵树)。

当每一次UI更新时,总会根据render重新生成最新的VNode,然后跟以前缓存起来老的VNode进行比对,再使用Diff算法(框架核心)去真正更新真实DOM(虚拟DOM是JS对象结构,同样在JS引擎中,而真实DOM在浏览器渲染引擎中,所以操作虚拟DOM比操作真实DOM开销要小的多

作者:小鹏爱摸鱼
链接:https://juejin.cn/post/7111243617653506085
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

image.png

不同点:

        核心思想的不同:

        

Vue早期开发就尤雨溪大佬,所以定位就是尽可能的降低前端开发的门槛,让更多的人能够更快地上手开发。这就有了vue的主要特点:灵活易用的渐进式框架,进行数据拦截/代理,它对侦测数据的变化更敏感、更精确。

React 从一开始的定位就是提出 UI 开发的新思路。背靠大公司Facebook 的React,从开始起就不缺关注和用户,而且React想要做的是用更好的方式去颠覆前端开发方式。所以React推崇函数式编程(纯组件),数据不可变以及单向数据流,当然需要双向的地方也可以手动实现, 比如借助onChange和setState来实现。

        组件写法的差异:

        

 React推荐的做法是JSX + inline style, 也就是把 HTML 和 CSS 全都写进 JavaScript 中,即 all in js;

 Vue 推荐的做法是 template 的单文件组件格式(简单易懂,从传统前端转过来易于理解),即 html,css,JS 写在同一个文件(vue也支持JSX写法)

        Diff 算法的差异:

                diff算法很早就有 - diff算法应用很广泛,例如提交**github pr** 或者(**gitlab mr**) - 如果要严格diff两棵树,时间复杂度是 `O(n^3)` ,算法不可用。

tree diff优化

        - 之比较同一层级,不跨级比较

        - tag 不同则删掉重建(不再去比较内部的细节)

React diff 特点

        - 仅向右移动

Vue2 diff 特点

        

- 时从新旧 children 的两端开始进行比较,借助 key 可以复用的节点。

- 定义四个指针(oldStartNode, oldEndNode, newStartNode, newEndNode),两两进行比较,之后每移动一次,都会进行一次比较,知道移动到中间的时候相遇了

Vue3 diff 特点   

        - 最长递增子序列

4.响应式原理不同

        

Vue

  • Vue依赖收集,自动优化,数据可变。

  • Vue递归监听data的所有属性,直接修改。

  • 当数据改变时,自动找到引用组件重新渲染。

React

React基于状态转移(数据),手动优化,数据不可变,需要setState驱动新的state替换老的state。当数据改变时,以组件为根目录,默认全部重新渲染, 所以 React 中会需要 shouldComponentUpdate 这个生命周期函数方法来进行控制

其他不同

api的差异也挺大的,Vue为了更加简单易用,引入了指令、filter等概念以及大量的option API,比如 watchcomputed等都是非常好用的。

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值