首页/ 填坑/ 文章详情

微信小程序 setData 共用一个地址,引发赋值被覆盖的现象

微信小程序 setData 赋值 地址 覆盖 发布于 2020-11-05

微信小程序有个 setData 的函数,其数据赋值功能,对此熟悉得再不能熟悉了。你以为了解了它的全部,不,你根本对它一知半解。

在制作选择时间范围功能时,startTime 与 endTime 初始化默认数据,其数据是一样的。本着能重复的代码只写一篇的原则,只声明一个 object 对象,赋值给两者,由此揭开 setData 不为人知的一面。

JSdata:{
     filter: {
         startTime: {show: 0, year: '',month: '',day: '',value: ''},
         endTime: {show: 0, year: '',month: '',day: '',value: ''},
     },
 },
 init: function () { //初始化数据
    let date = new Date();
    let object = {
        show: 0,
        year: date.getFullYear(),
        month: date.getMonth() + 1,
        day: date.getDate(),
        value: ''
    }
   
    this.setData({
        'filter.startTime': object,
        'filter.endTime': object ,
    });
}

在选好时间段后,分别对filter.startTime.yearfilter.endTime.year 数据进行赋值。最终先赋值的filter.startTime.year 被后来的filter.endTime.year覆盖了。

JS...
this.setData({
    'filter.startTime.year': 2019,
    'filter.endTime.year': 2020
});
console.log('year',this.data.filter.startTime.year,this.data.filter.endTime.year);
//输出结果:year,2020,2020
...

出现这种情况,开始还怀疑赋值时触发了别的事件,结果注释所有代码,问题依旧。

问题的产生只因为只声明一个 object 对象对两者同时赋值,在赋值 filter.startTime filter.endTime下一级的值时,它们父节点是共用一个地址IP,引发前者被后者覆盖的现象。

解决的方法同样很简单,即然是共用一个地址IP,那声明多一个object1对象,让内存开辟新的地址来存储数据。

JS...
this.setData({
    'filter.startTime': object,
    'filter.endTime': object1 ,
});
...

文章评论0 records

最新 最早

0

最新评论Latest comments

HentaiCatHentaiCat 2020-12-30 10:22
考科目二全程很紧张,考了三次才过,有次侧方入库直接pass,100分扣完,呜呜呜~
猫猫酱猫猫酱 2020-11-12 10:56
一入多肉深似海,说多都是泪
soulkunsoulkun 2020-11-05 15:54
IconFont的图标真的很好用!!!
无限链霉球菌无限链霉球菌 2020-11-03 11:41
药店,了解一下(`・ω・´)
HentaiCatHentaiCat 2020-11-02 15:28
(ಡωಡ)很实用,直接拿走...