创建编辑用默认对象时出现异常Bug求助
问题排查与解决
先确认控制台的视觉错觉问题
浏览器控制台打印对象时采用惰性求值,展开对象时读取的是当前最新值,而非打印瞬间的快照。你可以用JSON.stringify打印完整快照来验证真实值:
const campaign = getDefaultCampaign(); // 或你当前的赋值方式 console.log(JSON.stringify(campaign, null, 2)); // 打印对象的字符串快照 console.log(campaign.mail);
如果字符串快照里mail属性是正确的,那只是控制台显示的问题,实际对象没问题;如果快照里mail和general内容一致,说明对象本身被修改了。
排查对象被修改的核心原因
- 避免全局默认对象被篡改
如果defaultCampaign是全局变量,排查项目中是否有其他代码直接修改了它的mail属性(比如误把general赋值给mail)。改成函数返回新对象的方式可以彻底规避这个问题:
const getDefaultCampaign = (): CampaignNpoCreate => ({ general: { campaignName: '', languages: [], urlName: '', campaignLogo: '-', approveP2P: false, }, mail: { enableThanksMail: false, enableFiscalCertificateMail: false, thanksMail: '', }, }); // 使用时每次生成全新对象 const campaign = getDefaultCampaign();
- 检查表单绑定是否有误
表单无法获取正确值,大概率是v-model绑定路径错误,比如误将mail的字段绑定到了general对象上:
<!-- 错误示例:混淆了general和mail的绑定路径 --> <input type="checkbox" v-model="campaign.general.enableThanksMail"> <!-- 正确绑定应该是 --> <input type="checkbox" v-model="campaign.mail.enableThanksMail">
仔细核对表单中所有绑定的属性路径,确保没有混淆general和mail。
- 排查后续代码的赋值操作
检查const campaign = ...之后的代码逻辑,是否存在不小心将general赋值给mail的情况,比如处理表单数据、接口请求时的错误赋值。
内容的提问来源于stack exchange,提问作者Jonathan Couck
相关产品推荐
相关产品推荐

