关于直接赋值对象导致响应式丢失

1.问题复现如下:

复制代码
 <el-select v-model="item.question_type" placeholder="请选择" @change="txChangeFn(index,item.question_type)">
                                        <el-option
                                            v-for="item in txList"
                                            :key="item.value"
                                            :label="item.label"
                                            :value="item.value">
                                        </el-option>
                                    </el-select>

//题型变更
        txChangeFn(index,params){
            this.wenjuan.wtlist[index].question_type=params
            if(this.wenjuan.wtlist[index].question_type=='dan'){
                this.wenjuan.wtlist[index]={
                    "question_text": "", //问题
                    "question_type": "dan", // 'dan'单选, 'duo'多选, 'text'文本
                    "required": "Y", // 是否必答
                    "xxlist": [
                            {
                                option_text: ""
                            },
                            {
                                option_text: ""
                            },
                            {
                                option_text: ""
                            },
                            {
                                option_text: ""
                            }
                    ] //选项list 对于文本题,此数组可以为空或省略
                }
            }else if(this.wenjuan.wtlist[index].question_type=='duo'){
                this.wenjuan.wtlist[index]={
                    "question_text": "", //问题
                    "question_type": "duo", // 'dan'单选, 'duo'多选, 'text'文本
                    "required": "Y", // 是否必答
                    "xxlist": [
                            {
                                "option_text": ""
                            },
                            {
                                "option_text": ""
                            },
                            {
                                "option_text": ""
                            },
                            {
                                "option_text": ""
                            }
                    ]
                }
            }else if(this.wenjuan.wtlist[index].question_type=='text'){
                this.wenjuan.wtlist[index]={
                    "question_text": "",
                    "question_type": "text",
                    "required": "Y",
                    // 无选项
                }
            }
        }

问题出现:在<el-select>组件中使用@change事件只触发了一次,可能是因为在选择项变化后,v-model的值没有发生实际变化,导致@change事件没有再次触发。

解决办法:检查一下在txChangeFn(index, item.question_type)方法中是否有修改item.question_type的逻辑,确保每次选择项变化后v-model的值都有实际变化。另外,还可以尝试在txChangeFn方法中手动将item.question_type设置为一个新的值,以确保@change事件能够再次触发。

2.修改后的值

txChangeFn(index, params) {

this.wenjuan.wtlist[index].question_type = params;

if (params === 'dan') {

this.wenjuan.wtlist[index].xxlist = [

{ option_text: "" },

{ option_text: "" },

{ option_text: "" },

{ option_text: "" }

];

} else if (params === 'duo') {

this.wenjuan.wtlist[index].xxlist = [

{ option_text: "" },

{ option_text: "" },

{ option_text: "" },

{ option_text: "" }

];

} else if (params === 'text') {

// 无需修改xxlist

}

}

修改this.wenjuan.wtlist[index].question_type后,直接修改该对象的属性而不是重新赋值整个对象,既可以不影响响应式。

相关推荐
m0_7190841131 分钟前
React笔记张天禹
前端·笔记·react.js
Ziky学习记录1 小时前
从零到实战:React Router 学习与总结
前端·学习·react.js
wuhen_n1 小时前
JavaScript链表与双向链表实现:理解数组与链表的差异
前端·javascript
wuhen_n1 小时前
JavaScript数据结构深度解析:栈、队列与树的实现与应用
前端·javascript
狗哥哥1 小时前
微前端路由设计方案 & 子应用管理保活
前端·架构
TT哇2 小时前
【实习 】银行经理端两个核心功能的开发与修复(银行经理绑定逻辑修复和线下领取扫码功能开发)
java·vue.js
前端大卫2 小时前
Vue3 + Element-Plus 自定义虚拟表格滚动实现方案【附源码】
前端
却尘2 小时前
Next.js 请求最佳实践 - vercel 2026一月发布指南
前端·react.js·next.js
ccnocare2 小时前
浅浅看一下设计模式
前端
Lee川2 小时前
🎬 从标签到屏幕:揭秘现代网页构建与适配之道
前端·面试