Vue3 和 React16.8 引入了较大的变更,所以 Vue 和 React 的对比一般指 Vue2 和 React16.7 的对比。
相同点
- 使用 Virtual DOM
- 提供了响应式(Reactive)和组件化(Composable)的视图组件
- 核心库与路由(react-router、vue-router)和状态管理(redux、vuex)分离
- 支持 JSX,移动端都支持原生渲染
- 提供了命令行工具(create-react-app、vue-cli)
- 提供了跨端解决方案(React Native、weex)
不同点
- 预编译
- React 可以通过 Prepack 优化 JavaScript 源代码,在编译时执行原本在运行时的计算过程,通过简单的赋值序列提高 JavaScript 代码的执行效率,消除中间计算过程及分配对象操作。缓存 JavaScript 解析结果,优化效果最佳
- Vue 可以静态分析 template,构造 AST 树,通过 PatchFlags 标记节点变化类型
- 渲染
- React
- 通过 shouldComponentUpdate / setState,使用 PureCompoent 等对比前后状态和属性,手动决定是否渲染来优化
- 推荐 jsx 语法,可扩展性好,可以渐进式应用
- CSS in JS
- Vue
- 推荐 template 语法,自动追踪组件依赖,精确渲染状态改变的组件
- 支持并且默认单文件组件,样式仍旧是 CSS 语法,迁移方便
- React
- 事件处理
- React
- 事件委托到 document,之后委托到 根节点
- 所有事件被合并为合成事件并兼容不同浏览器
- 事件处理函数中的 this 需要手动绑定或使用箭头函数声明
- Vue
- 支持原生事件
- this 自动绑定执行上下文
- React