设计哲学:Vue 偏「约定优于配置」——官方给全套(路由/状态/构建工具/语法规范都有官方答案),框架帮你做决定,上手快。React 偏「自由与组合」——只提供核心机制,路由/状态/请求都从生态挑,灵活但选型负担重。模板(Vue)接近逻辑与视图分离的传统写法;JSX(React)把逻辑与视图彻底融合(JS 能力全在模板里)。
响应式实现:Vue 是精确的细粒度依赖追踪(Proxy,数据变化知道谁依赖它,精准更新对应组件);React 是全组件树 diff(状态变了组件重渲染,靠 memo/手动优化)。工程化:Vue 官方全家桶(Vue Router/Pinia/Vite)默认匹配;React 生态(React Router + Redux/Zustand + Next/Vite)需要自行决策。
<!-- 同一个计数器:两版写法对比 --> <!-- Vue SFC:模板 + 组合式 API --> <template> <button @click="count++">{{ count }}</button> </template> <script setup> import { ref } from 'vue'; const count = ref(0); </script> <style scoped> button { color: #42b883; } </style> <!-- React 函数组件:JSX + Hooks --> import { useState } from 'react'; import styles from './Btn.module.css'; export function Counter() { const [count, setCount] = useState(0); return ( <button className={styles.btn} onClick={() => setCount(count + 1)}> {count} </button> ); }