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进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注