请教个问题
在 vue2 中,有一个 json 对象,赋值后数据却变了,哪位高人熟手给指点下啥原因,拜谢!
问题代码
test() {
const data ='{
"code":200,
"message":"获取成功",
"data":{
"list":[
{
"id":4,
"parent_id":0,
"title":"WHWHWHWHWHWHWHWH",
"xxx_pri":"0.95",
"xxx_pri":"0.98",
"state":1
},
],
"count":"1"
}
}'
const d = JSON.parse(data)
console.log(d.data.list) //此时 list[0].state=1
this.type_list = d.data.list
console.log(this.type_list) //此时 list[0].state=0,
},
如在赋值之前,加入语句,强制 int 转 string 则可以。
//加入转换
d.data.list.forEach((element) => {
element.state = element.state.toString()
})
百思不得其解,哪位给指点一二
1
xiongotom 2021-09-26 13:17:08 +08:00
应该是 this.type_list 绑定了什么东东
|
4
pupboss 2021-09-26 13:30:48 +08:00
了解一下深拷贝浅拷贝
|
5
clf 2021-09-26 13:31:24 +08:00
调试。
|
7
dfkjgklfdjg 2021-09-26 14:21:22 +08:00
一眼感觉是你的其他业务代码修改了,监听一下每次修改。或者给这个对象加一个 setter 在内部打印,我想应该就可以看到问题了。
|
9
3wdddd 2021-09-26 14:38:07 +08:00
你发的这段代码并不是问题代码,检查一下你的 mixins,组件的 props,watch 函数,v-model, sync 语法糖,绝壁被别的地方改动了
|
10
aikilan 2021-09-26 16:10:03 +08:00
建议贴一下当前组件全部上下文代码
|
11
sjhhjx0122 2021-09-26 17:14:54 +08:00
试试赋给 type_list 时深拷贝一下
|
12
Chingim 2021-09-26 18:38:43 +08:00
试着 console.log 的时候不要打印对象, 因为这个对象有可能是 log 之后才被改的, 但是却给你一种"console.log 的时候就是这个值"的感觉
const d = JSON.parse(data) console.log(JSON.stringify(d.data.list)) this.type_list = d.data.list console.log(JSON.stringify(this.type_list)) 以上全是同步的代码, 没理由值会变 |
13
cheese 2021-09-26 19:32:58 +08:00
不会是深浅拷贝的问题,你看看监视数据的函数,肯定是改动了
|
14
2i2Re2PLMaDnghL 2021-09-27 10:07:37 +08:00
你的 this 是哪来的?
先把打印部分这样改下 const d = JSON.parse(data) console.log(d.data.list) this.type_list = d.data.list console.log(d.data.list) console.log(this.type_list) console.log(d.data.list===this.type_list) |