Vue.js 响应式 Ref 数组与对象的处理差异

梦瑶小哥_2433

梦瑶小哥_2433

2026-07-07

168人浏览

原创

ref适用于所有类型,必须用.value访问;reactive仅支持对象/数组,直接属性访问;基本类型必须用ref,复杂结构推荐reactive。

vue.js 响应式 ref 数组与对象的处理差异

Vue 中的 ref 本身不区分“Ref 数组”或“Ref 对象”这种说法——它统一包装任意值,但数组和对象在使用方式、响应行为和实际注意事项上确实有明显差异。关键不在 ref 类型,而在于你用 ref 包什么、怎么改、怎么读。

ref 包数组:得靠 .value 访问,但修改要小心

ref 可以安全包装数组,比如 const list = ref([1, 2, 3])。它能响应式,但要注意:

  • 读取时必须写 list.value(例如 list.value.length 或 list.value[0])
  • 修改数组内容时,推荐用 Vue 能捕获的原生方法:push()、pop()、splice()、sort() 等——这些会触发视图更新
  • 避免直接赋值新数组(如 list.value = [4, 5, 6]),虽然有效,但会丢失原有响应式连接;更稳妥的是用 list.value.splice(0, list.value.length, ...newArray)
  • 不能用 map、filter、slice 这类返回新数组的方法直接更新,因为它们不改原数组,Vue 捕捉不到变化

ref 包对象:可响应,但嵌套深了不如 reactive 直观

ref 也能包装对象,例如 const user = ref({ name: 'Alice', age: 30 }),但它和 reactive 的体验不同:

vue-composition-api-best-practices
vue-composition-api-best-practices

Vue 3 组合式 API 与

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue 教程
Vue 教程

共42课时 | 17.1万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.4万人学习

Vue.js 微实战--十天技能课堂
Vue.js 微实战--十天技能课堂

共18课时 | 1.7万人学习