Vue 与 React 的区别?
1. 从宏观定位上:框架 vs 库
React 本质是一个 UI 库,只专注于视图层,强调函数式编程,核心是组件化+状态驱动, 官方不提供完整解决方案(比如路由、状态管理要靠 React Router、Redux、Zustand 等第三方库)。
Vue 是渐进式框架, 更像是一个“开箱即用”的全家桶方案(官方维护了 Router、状态管理库)。
2. 从核心实现上:响应式原理 vs VDOM Diff
这是它们底层工作方式最核心的不同。
React 通过 useState
、useReducer
等 Hook 手动管理状态,每次修改状态会触发函数重新执行,依赖虚拟 DOM diff 更新视图。
import { useState } from "react";export default function App() {const [count, setCount] = useState(0);console.log("组件重新渲染了"); // 每次 setCount 时,这里都会执行return (<div><p>当前计数:{count}</p><button onClick={() => setCount(count + 1)}>+1</button></div>);
}
React 使用 响应式系统 (reactive/ref),通过 Proxy 自动追踪依赖,改变数据,DOM 自动更新,不需要额外操作。
<template><div><p>当前计数:{{ count }}</p><button @click="count++">+1</button></div>
</template><script setup>import { ref } from 'vue'const count = ref(0)// 这里不会像 React 一样整组件重新跑,而是精确追踪到 {{ count }}
</script>
3. 从代码写法上:模板语法 vs JSX
React 使用 JSX(JavaScript + XML),HTML 写在 JS 中。强调“一切皆 JavaScript”,逻辑与模板强绑定。
function App() {const [count, setCount] = useState(0);return (<div><p>{count}</p><button onClick={() => setCount(count + 1)}>+1</button></div>);
}
Vue 使用 单文件组件 (SFC),将 template、script、style 分开,更贴近传统 HTML 的写法,上手更自然 。
<template><div><p>{{ count }}</p><button @click="count++">+1</button></div>
</template><script setup>import { ref } from 'vue'const count = ref(0)
</script><style scoped>button { color: red; }
</style>
4. 关于性能
Vue 3 的 编译时优化(编译成渲染函数 + 静态提升)在部分场景下性能更优。
React 依赖 虚拟 DOM diff,但通过 Fiber 架构优化了调度能力,配合 Concurrent Mode、Suspense 也能处理复杂 UI。