共同点
- 虚拟DOM
- 提供响应式和可组件性的视图组件
- 路由及状态管理借助第三方库
不同点
1.API
vue的API比较多,上手简单
ReactAPI较少,函数式编程
2.性能
在react中,当组件状态改变时,它会触发整个子组件数重新渲染,以根组件作为渲染基点。为了避免不必要的子组件重新渲染,你需要使用 useMemo/pureComponent等其操作减少加载 。
在Vue中,一个组件在渲染期间依赖于自动追踪,因此系统知道提前预判哪一个组件需要渲染当组件状态发生改变时,不需要注意嵌套的组件。
3.template / JSX 的使用差异
写法差异
React更偏向于js写法,而vue内有各种指令去实现功能 标签展示 react直接借助数据,vue需要 v-if 列表展示 map 和 v-for的使用
vue3也引入了JSX
4.css的使用
vue 直接使用或者引入
React CSS-IN-JS
5.状态管理库
均采用第三方库
React内采用函数式编程,Redux内也是函数式编程,函数式编程的特点是不可变性。
React + MobX工作流可以被认为是一个更加详细的Vue
vue内的Vuex和pinia等
6.数据流
vue数据实现了双向绑定 v-model
react中数据是单向数据流 useState/setState
7.通信
相同的:props、ref(具体用法不同) 、三方库(vue[vuex,pinia] 、react[redux,mobx])
不同的:react上下文
vue组件通信之间通信方式更多一些
8.虚拟DOM
vue 支持指令是因为背后有 vue-template-compiler 这个编译器的支持,把带有指令的视图模板转化成 AST 抽象语法树,进一步转化成虚拟 DOM。
React在初始加载时会先生成一个Fiber树(旧的virtual DOM树),然后后续更新会生成一个新的 virtual DOM树,二者进行对比
React 采用了 Fiber(双向链表)的数据结构,作为 “协调”(Diff)运算的基础数据。React 背后还提供了强大的 react-reconciler 和 scheduler 库实现 Fiber 链表的生成、协调与调度。
9.响应式
vue双向数据绑定,react是单向数据流,数据自上而下
vue2 的响应式原理是使用了 Object.defineProperty 进行了数据劫持,数据劫持发生 vue 组件的创建阶段
vue3 的响应式原理是使用了 Proxy,颗粒度精细
React内是通过受控组件实现响应式
10.Next.js vs Nuxt.js
参考链接: