如何在 Vue 3 中持久化存储多个字典对象到响应式数组中

胖婷同学_7853

胖婷同学_7853

2026-04-28

672人浏览

原创

本文详解 Vue 3 响应式数组(如 ref([]))在组件重复挂载/销毁时被重置的问题,指出根本原因是组件意外重建导致 ref 初始化重执行,并提供父级托管状态、避免组件卸载等专业解决方案。

本文详解 vue 3 响应式数组(如 `ref([])`)在组件重复挂载/销毁时被重置的问题,指出根本原因是组件意外重建导致 `ref` 初始化重执行,并提供父级托管状态、避免组件卸载等专业解决方案。

在 Vue 3 的问卷类组件(如 Survey)中,常见需求是:每次点击选项(resp),将当前题目与回答封装为字典(如 { qst: '...', rep: '...' })并追加至数组 QuizToSub,后续统一提交。但开发者常遇到“新对象覆盖旧对象”或“数组始终只有一项”的假象——实际并非数据被覆盖,而是整个 ref([]) 数组在组件重新创建时被重置为空数组。

? 根本原因:组件意外重建

Vue 组件若因条件渲染(如 v-if)、动态路由切换或父组件强制重渲染而被销毁并重建,其 setup() 中定义的 ref([]) 将重新执行,导致历史数据丢失:

// ❌ 危险写法:ref 在每次组件实例化时都会重置
const QuizToSub = ref([]);

可通过生命周期钩子快速验证是否发生重建:

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

Vue 3 组合式 API 与

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app快速上手
uni-app快速上手

共0课时 | 0人学习

Vue 教程
Vue 教程

共42课时 | 17.2万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 2.5万人学习