正文
学完 Vue 和 React 基础,很多同学会困惑:两者有什么区别?开发中容易踩哪些坑?这一篇帮你整理清楚,适合收藏、复习。
一、核心思想对比
表格
| 维度 | Vue3 | React |
|---|---|---|
| 设计理念 | 渐进式框架,易于上手 | 灵活强大,强调单向数据流 |
| 模板语法 | 模板 + script setup | JSX 语法 |
| 响应式 | 自动追踪依赖 | 手动 setState /useState |
| 学习成本 | 低,上手快 | 稍高,需要理解 Hooks |
| 生态 | 国内企业极多 | 全球生态最完善 |
二、语法写法对比
定义响应式数据
Vue3:
const count = ref(0)
count.value++
React:
const [count, setCount] = useState(0)
setCount(count + 1)
条件渲染
Vue:
<div v-if="isShow"></div>
React:
{ isShow && <div></div> }
列表渲染
Vue:
<li v-for="item in list" :key="id"></li>
React:
list.map(item => <li key={item.id}></li>)
三、前端通用避坑指南(高频坑)
1. 不要在循环 / 条件里使用 Hooks(React)
错误:
if (xxx) {
useState() // 报错
}
Hooks 必须在组件顶层,不能在 if/for 里。
2. Vue3 解构 props 会丢失响应式
错误:
const { name } = defineProps(['name'])
正确:
const props = defineProps(['name'])
const name = computed(() => props.name)
// 或 toRefs
3. 直接修改数组 / 对象不触发更新
Vue reactive 直接赋值有时失效:
state.list = newList // 可能不更新
state.list = [...newList] // 推荐
React 不能直接改原数组:
list.push(xxx) // 不更新
setList([...list, xxx])
4. 定时器 / 事件监听不销毁,造成内存泄漏
Vue:
onMounted(() => {
timer = setInterval()
})
onUnmounted(() => clearInterval(timer))
React:
useEffect(() => {
const timer = setInterval()
return () => clearInterval(timer)
}, [])
5. v-if 和 v-for 不要用在同一个标签
Vue 中 v-for 优先级更高,会造成性能浪费。正确做法:在外层套 template。
6. 长列表不做优化,页面卡顿
无论 Vue 还是 React,长列表一定要用:
- 虚拟列表
- 懒加载
- 分页加载
7. 第三方 UI 组件样式不生效
Vue scoped 样式穿透:
:deep(.el-button) { ... }
React 用 global 或 CSS Modules。
四、该学 Vue 还是 React?
- 想快速上手、做小程序、国内中小企业:优先 Vue3
- 想进大厂、做跨端、全球生态:优先 React
- 职业前端建议:两者都会最吃香
五、总结
- Vue 上手简单、语法清晰,适合快速开发
- React 灵活强大,生态无敌,适合复杂项目
- 两者底层思想相通:组件化、状态管理、生命周期
- 避开常见坑,项目体验和代码质量会明显提升
这篇对比 + 避坑指南,适合前端新手收藏备用。