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等都是非常好用的。

     

### VueReact的主要区别及适用场景 #### 一、设计哲学 Vue被定位为渐进式框架,提供了开箱即用的功能,并支持逐步集成到现有项目中。React则更像一个专注于视图层的UI库,需要搭配社区生态来完成路由状态管理等功能[^4]。Vue通过模板语法降低学习门槛,而React采用JSX语法,虽然对初学者可能稍显复杂,但提供了更高的灵活性组件化开发能力[^2]。 #### 二、数据绑定与响应式机制 Vue采用双向数据绑定机制,数据更新会自动触发视图更新,开发者无需手动操作。这种机制使得Vue的开发体验更加友好[^2]。React则采用单向数据流,父组件通过`props`将数据传递给子组件,子组件需要通过回调函数或事件通知父组件以实现数据更新。React的状态更新依赖于`setState`(类组件)或`useState`(函数组件),并通过虚拟DOM的Diff算法优化渲染性能[^4]。 #### 三、性能表现 Vue在一些特定场景下,例如简单的模板渲染,可能具有更好的性能表现。然而,React通过虚拟DOM技术,在大规模动态更新的场景下能够提供更高效的渲染性能[^2]。Vue 3引入了`Proxy`替代`Object.defineProperty`,进一步提升了响应式系统的性能[^4]。 #### 四、生态系统 React拥有庞大的生态系统,社区活跃,提供了丰富的第三方库插件支持,如Redux用于状态管理、React Router用于路由管理等。Vue的生态系统相对较小,但也有一些优秀的工具插件,如Vuex(状态管理)Vue Router(路由管理)。对于团队来说,选择React意味着可以利用更广泛的社区资源。 #### 五、适用场景 - **Vue**:适用于希望快速上手、开发周期较短的项目,尤其是中小型应用或需要逐步迁移到现代前端技术栈的遗留系统。Vue的渐进式特性使其能够轻松集成到现有项目中[^4]。 - **React**:更适合构建大型复杂应用,尤其是需要高度组件化灵活扩展的应用场景。React的单向数据流强大的生态系统使其成为构建高性能、可维护性高的前端应用的理想选择[^2]。 ```javascript // Vue 示例:双向数据绑定 new Vue({ el: '#app', data: { message: 'Hello Vue!' } }); // React 示例:单向数据流 import React, { useState } from 'react'; function App() { const [message, setMessage] = useState('Hello React!'); return <div>{message}</div>; } ``` #### 六、开发哲学 Vue通过约束性语法降低了开发者的心智负担,适合希望快速构建功能的团队。React则通过组合原生JavaScript能力释放创造力,适合注重灵活性技术深度的团队[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值