共同点
- 虚拟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。数据改变时,以组件为根目录,默认重新渲染。