data中的数据没有通过setData()来绑定,但是data中的值确发生了改变
发布于 5 年前 作者 qiangzheng 4198 次浏览 来自 问答

下面是同事写的一个小demo,Page.test()是一个bindtap点击事件

Page({
   data: {
       test:[{
           a:[],
           b:[]
       }]
   },
   test: function () {
       var that =this;
       var arr=that.data.test;
       console.log(that.data.test)
       arr.a=[0,1,2]
   }
})

代码中没有出现setData(),只是进行了赋值。当执行到arr.a=[0,1,2]的时候,console.log(that.data.test)是没有执行的,当arr.a=[0,1,2]完成的时候,console.log(that.data.test)才会执行,而打印出来的值缺如下图:


我在文档中并没有查找到相关描述,不知是不是小程序的一个坑。

3 回复

页面确实没有渲染,也就是说,setData其实并不是给data赋值的方法,而是对渲染页面的方法,而data则是类似C语言中的指针。

但是如果是把arr.a=[0,1,2]改成arr=[0,1,2],就不会出现上述的情况

是的,这种情况只能想到是操作了指针或引用一类的东西了,setdata应该是变量赋值+render

确实这样,但是页面并不会渲染,只有调用setdata页面才会渲染,不知道是否有意为之,现在这种情况,可以直接赋值,但是又不影响页面展示的内容

回到顶部