最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Vue reactive 状态如何维护问卷调查题目列表及用户作答数据
时间:2026-08-18 12:20:49 编辑:袖梨 来源:一聚教程网
推荐用单个 reactive 对象统一管理问卷状态,将题目结构与用户作答内聚于 formState.questions 中,每题初始化即带 selected/value 等响应式字段,跳转与提交均基于题对象自身字段计算,避免分散状态和额外组装。
用 reactive 维护问卷调查的状态,核心是把「题目结构」和「用户作答」统一建模为响应式对象,而不是分散管理。关键不在“能不能”,而在“怎么组织才不易错、易扩展、好提交”。
题目列表与作答数据要合并在一个 reactive 对象里
不要分开定义 questions: reactive([]) 和 answers: reactive({})。这样容易不同步、难校验、跳转逻辑混乱。推荐结构如下:
- 整个问卷用一个
reactive包裹,例如const formState = reactive({ questions: [], current: 0, // 当前题序号 }) - 每道题的数据(含选项)直接带
selected或value字段,比如单选题的选项数组里加selected: false,简答题字段加value: '' - 服务端返回的原始题干不动,但初始化时就给每题“注入”作答字段,避免后期反复
$set或判断是否存在
题型差异通过字段动态判断,不靠多个 reactive 变量
单选、多选、填空、上传等类型,都存在同一份 questions 数组中。渲染时用 v-if 判断 item.type,而不是为每种题型单独声明 reactive 数据。
- 例如:单选题用
v-model="item.selectedOptionId";多选题用v-model="item.selectedOptionIds";文本题用v-model="item.value" - 所有这些字段都在初始化时一并写入题对象,保证响应式追踪生效
- 避免在组件内用
ref或局部reactive存答案,否则父级无法统一收集
跳转与保存必须绑定到题对象自身,而非外部索引
“下一题”不是简单 current++,而是根据当前题的 jump_id 或选项的 jump_id 决定去向。作答状态也应随题走:
- 点击选项时,立刻更新该题的
selectedOptionId,并检查该选项是否带jump_id,有则直接跳转 - 点击“下一题”时,先校验当前题是否必填,再按规则推进:若当前题无跳转,则
current++;若有,则跳转到对应id的题 - 所有跳转逻辑都基于题对象的字段计算,不依赖外部 map 或 switch-case 查表
提交前只需遍历 questions,提取有效字段即可
最终提交的数据结构,和初始化时保持一致,不需要额外组装。例如:
- 单选题提交
{ id: 13, selected_option_id: 34 } - 多选题提交
{ id: 17, selected_option_ids: [32, 35] } - 文本题提交
{ id: 18, value: "我的回答..." } - 遍历
formState.questions,对每题 pick 出对应字段,push 到提交数组,干净利落
相关文章
- 小米4c路由器重置怎么弄(小米4c路由器重置教程) 08-20
- 小米4c路由器支持mesh组网吗(小米4c路由器支不支持mesh组网) 08-20
- 小米4c路由器可以无线桥接吗(小米4c路由器无线桥接方法) 08-20
- iPhone17系列销量还在飙升能冲击4000万台大关吗 08-20
- 手机wps如何求平均值 08-20
- 小米4c路由器参数怎么样(小米4c路由器参数详解) 08-20