用setdata直接传递整个数组或者对象的困惑
发布于 6 年前 作者 laixia 13084 次浏览 来自 问答

按本人之前的理解,用setdata修改某整个数组或者对象,属于引用

因此,下面的代码,在变量t和this.data.ttt通过setdata建立引用关系后,修改t,那么ttt应该相应变动,虽然没有渲染,变量t和this.data.ttt是相同内存的,预期最后的console.log输出应该是一致的,

let t = [{ key1: 999 }]
this.setData({
  ttt: t
})
t[0].key1 = 888
console.log(JSON.stringify(t))
console.log(JSON.stringify(this.data.ttt))



这一段代码放在我自己正在开发的小程序的index页面的onload()中,表现和预期一致:

!!诡异的事情是这样发生的,把同一段代码放到官方的小程序demo或者weui演示里面的index页面的onload()中,表现确完全不同,t和this.data.ttt的值不同了,结果如下

求大佬解惑

附:setdata整个数组或者对象,个人主要用在这样的情形:对整个需要渲染的数组,需要进行相对复杂的逻辑处理,为了避免频繁的setdata单个元素或者属性,采取了在整个逻辑处理完毕后,再一次性setdata整个对象

1 回复

!找到了一个表象原因,在测试代码的.json配置文件中,比如index.json,如果有声明:

"usingComponents": {}

那么上面的预期一致,t和this.data.ttt是相同的,感觉是引用了。

如果没有,t和this.data.ttt是不同的,感觉是完全不同的内存空间,在官方demo和weui的相关index.json配置文件中,都没有usingComonents。

那么这个深层次原因是什么?

求大佬解惑

回到顶部