1. 从宏观定位上:框架 vs 库

React 本质是一个 UI 库,只专注于视图层,强调函数式编程,核心是组件化+状态驱动, 官方不提供完整解决方案(比如路由、状态管理要靠 React Router、Redux、Zustand 等第三方库)。

Vue 是渐进式框架, 更像是一个“开箱即用”的全家桶方案(官方维护了 Router、状态管理库)。

2. 从核心实现上:响应式原理 vs VDOM Diff

这是它们底层工作方式最核心的不同。

React 通过 useStateuseReducer 等 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。

更多推荐