Vue 和 React

116 阅读2分钟

共同点

  • 虚拟DOM
  • 数据驱动视图
  • 组件化

数据驱动视图,使用数据驱动试图方式,不用自己去亲自操作DOM,在开发时,只需要关注数据的变化。

组件化,将页面各个部分分成负责各自内容的细块,再由这些组成最后的网页界面。

Virtual DOM,都使用的虚拟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开销要小的多)

不同点

  • 核心思想不同
  • 组件写法差异
  • diff算法不同
  • 响应式原理不同

核心思想不同

vue的定位是降低前端开发的门槛,能够便捷的上手开发,有着灵活易用的渐进式框架,数据的拦截/代理等

react的定位是UI开发的新思路,推崇函数式编程,数据不可变及单向数据流。

组件写法差异

react的做法是把html、cass全部在js中编写;vue的做法是模板的单文件,将html、css、js写在同一个文件

diff算法不同

vue2使用全量diff,会比较每一个虚拟节点,对于不同的地方进行局部更新;vue3使用静态标记和非全量diff,使diff可以跳过静态标记过的节点

react

响应式原理

vue2采用数据劫持和观察监听者模式,vue3使用数据代理及reflect操作数据

react基于状态、手动优化、数据不可变,需要setState驱动新的state替换老的state。数据改变时,以组件为根目录,默认重新渲染。