← 返回内容列表
基础原理

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

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

先用白话理解

这篇内容在讲什么?

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:根据其他数据计算结果