← 返回内容列表
基础原理

Vue 3 响应式为什么能自动更新页面

Vue 的响应式本质是记录“谁使用了数据”,在数据变化后只通知相关部分更新。

Vue 3 响应式原理Vue refVue reactiveVue computed依赖收集Proxy 响应式

先用白话理解

这篇内容在讲什么?

Vue 会记住页面使用了哪些数据,数据变化后自动更新相关页面。

问题

Vue 修改数据后页面没更新,或解构后失去响应式,怎么办?

直接解构 reactive 对象,或在响应式系统外保存了旧值。

解决方案
  1. 基础值使用 ref
  2. 对象使用 reactive
  3. 解构使用 toRefs
  4. 派生值使用 computed
响应式状态、派生值与监听示例代码
type UserState = { name: string; score: number }

const state = reactive<UserState>({
  name: '肥猫',
  score: 0
})

const { name, score } = toRefs(state)
const level = computed(() => score.value >= 100 ? '高级' : '入门')

function addScore(value: number) {
  state.score += value
}

watch(score, (next, previous) => {
  console.log(`积分:${previous} → ${next}`)
})
01

数据读取时记录依赖

组件渲染或 computed 读取响应式数据时,Vue 会记录当前逻辑依赖了哪些值。

02

数据修改时触发更新

ref 通过 value 访问,reactive 使用代理对象;修改后 Vue 会通知相关副作用重新执行。

03

避免破坏响应式连接

直接解构 reactive 对象可能失去响应式联系,可以使用 toRefs 或保持对象访问。

  • ref 适合单值
  • reactive 适合对象
  • computed 适合派生数据

结语

判断最终要回到真实体验

技术方案没有脱离场景的标准答案。把用户任务、业务边界、开发成本和长期维护放在一起评估,才有可能做出稳定、清晰且经得起变化的页面。

照着做的步骤

  1. 用 ref 或 reactive 保存状态
  2. 在模板或 computed 中读取
  3. 通过明确方法修改数据
  4. 观察相关视图更新

容易踩的坑

  • 随意解构 reactive
  • 把普通变量当响应式变量
  • 在 computed 中修改状态

术语不用怕

  • ref:包装单个响应式值
  • reactive:创建响应式对象
  • computed:根据其他数据计算结果