Skip to content

Vue 与 React 对比总结

面试高频考点 + 双前端项目的最佳说明书。这张对比表要能流利讲出来。

一、核心思想对比

维度Vue 3React 18
核心思想数据驱动视图 + 响应式自动更新UI = f(state),状态变化触发重渲染
更新机制响应式代理,精确追踪依赖组件函数重新执行(Re-render)
模板方案<template> 模板 + 指令JSX,JS 与 HTML 混写
状态ref / reactive,自动解包useState,需 .value/回调更新
数据更新直接改 .value 即可必须不可变更新(新引用)
副作用watch / computed / onMounteduseEffect(依赖数组)
作用域样式<style scoped>CSS Modules
学习曲线平缓,模板直观需先理解"重渲染"心智模型

二、同一功能两种写法对照

计数器

vue
<!-- Vue -->
<script setup lang="ts">
import { ref } from 'vue'
const count = ref(0)
</script>
<template>
  <p>{{ count }}</p>
  <button @click="count++">+1</button>
</template>
tsx
// React
import { useState } from 'react'
export default function Counter() {
  const [count, setCount] = useState(0)
  return <p>{count}<button onClick={() => setCount(count + 1)}>+1</button></p>
}

列表渲染

vue
<!-- Vue -->
<ul>
  <li v-for="p in products" :key="p.id">{{ p.name }}</li>
</ul>
tsx
// React
<ul>{products.map((p) => <li key={p.id}>{p.name}</li>)}</ul>

条件渲染

vue
<!-- Vue -->
<p v-if="stock > 0">有货</p>
<p v-else>已售罄</p>
tsx
// React
{stock > 0 ? <p>有货</p> : <p>已售罄</p>}

三、生态对照

场景Vue 生态React 生态
脚手架create-vue(Vite)create-vite
路由Vue RouterReact Router v6
状态管理PiniaZustand / Redux Toolkit
组件库Element Plus / Naive UIAnt Design / MUI
请求axios / VueUseaxios / SWR / TanStack Query
表单Element Plus Form / VeeValidateAntD Form / React Hook Form

四、怎么选(面试可这样回答)

  • 团队背景:Vue 在国内中小企业、外包、管理后台占主流;React 在外企、大厂前端中台、国际化产品更普遍。
  • 上手速度:Vue 模板直观、中文生态完善,新人上手快。
  • 生态与人才:React 生态更庞大、岗位量更大(尤其高级岗位)。
  • 招聘现实:两者都会 → 覆盖面最广。

求职话术

"我主力是 Vue 3,但用 React 完整做过一个商城前端,两者都理解。我总结 Vue 靠响应式自动更新、React 靠显式状态与不可变更新,都遵循'数据驱动视图'。我能够根据团队技术栈快速切换。"——这段话能拿下大部分前端岗位面试的开场。

五、本项目双端对照

功能Vue 端React 端
首页商品列表HomeView.vue + v-forHome.tsx + map
登录态Pinia userStoreZustand useUserStore
路由守卫beforeEach<RequireAuth>
请求封装utils/request.tsutils/request.ts(几乎相同)
组件库Element PlusAnt Design

有意思的发现:请求封装、接口定义、类型文件,两端几乎可以复制粘贴。这说明——框架差异集中在视图层,而工程化与数据层的经验是通用的。这也是全栈工程师的优势:技术栈可以换,解决问题的思路不变。

基于 MIT 协议发布,可自由学习与修改