vue3+pinia存储对象赋值踩坑
自我记录
前文描述:大概就是我在本地存储里面的对象obj1 里面的属性名 和我页面赋值 obj的属性名一致,我就直接赋值了,而没有一一对应去赋值,此时出现一个bug,就是因为我obj的对象是v-model双向数据绑定的input值,当我第一次改完触发保存存储时,下次在进入这个页面,先判断如果obj存在就赋值,问题来了,赋值之后我改input,本地存储的数据也变了
大概就是下面这样
// 例如 obj是
const salaryForm = ref({
base: 0,
deduct: 0,
merit: 0,
other: 0,
subsidy: 0,
})
// obj1是
const salaryInfo = ref()
const setSalaryInfo = (v) => {
salaryInfo.value = v
}
// 给obj1赋值
addInfoStore.setSalaryInfo(salaryForm.value)
// 页面回显的时候
if(addInfoStore.salaryInfo){
salaryForm.value = addInfoStore.salaryInfo // 错误写法
}
// 正确写法
if(addInfoStore.salaryInfo){
salaryForm.value.base = addInfoStore.salaryInfo.base
salaryForm.value.deduct = addInfoStore.salaryInfo.deduct
salaryForm.value.subsidy = addInfoStore.salaryInfo.subsidy
salaryForm.value.merit = addInfoStore.salaryInfo.merit
salaryForm.value.other = addInfoStore.salaryInfo.other
}
// 解构赋值的写法更优雅
if(addInfoStore.salaryInfo){
const { base, deduct, subsidy, merit, other } = addInfoStore.salaryInfo
salaryForm.value = { base, deduct, subsidy, merit, other }
}
记录问题:语法上没有区别,都是给salaryForm.value赋值。但是作用域上有些区别,根据你的赋值方式,可以清楚地知道每个属性的值从哪里来。此外,如果你需要更新多个属性,使用解构赋值的方式会更加清晰和简洁。而如果使用的是对象赋值的方式,那么对象中的所有属性都会被更新,可能不是你期望的行为。
具体涉及到堆栈http://t.csdnimg.cn/hOg2y
原文地址:https://blog.csdn.net/zhgweb/article/details/134670083
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_#ID#.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。