Vue vs React 状态模型核心差异

Vue 响应式状态 vs React 状态快照的本质区别。

#type / synthesis #status / growing #tech / dev / frame #resource / react #resource / vue3

[!info] related notes

Vue vs React 状态模型核心差异

主题范围

本篇聚焦 Vue 和 React 在”状态是什么、怎么变”这个最本质问题上的差异。

一句话定义

  • Vue 状态:可追踪的响应式对象,改了就知道谁依赖
  • React 状态:渲染快照,改了要提交,提交后才有新快照

Vue:响应式状态

本质

状态是一个响应式对象,框架在运行时拦截读写操作:

const state = reactive({ count: 0 })

state.count++ // 直接修改,Proxy 拦截

特点

  • 直接修改state.count = 1 即可触发更新
  • 自动追踪:谁读了 state.count,Vue 都知道
  • 无需不可变:可以直接 state.list.push(item)

React:状态快照

本质

状态是当前渲染的快照,修改需要”提交”:

const [count, setCount] = useState(0)

setCount(1) // 提交更新,不是直接修改
console.log(count) // 仍然是旧值

特点

  • 提交机制:通过 setState 提交更新请求
  • 快照模型:当前渲染里 state 是固定值
  • 不可变更新:必须 { ...state, count: 1 }

直观对比

场景VueReact
定义状态const state = reactive({})const [state, setState] = useState({})
修改状态state.count = 1setCount(prev => ({ ...prev, count: 1 }))
读取同步变化立刻读到新值需等下次渲染
数组操作arr.push(item)setArr([...arr, item])

最短记忆方式

  • Vue:状态 = 响应式对象,改了自动更新
  • React:状态 = 渲染快照,改了提交更新
创建于 2026/4/7 更新于 2026/5/27