微信小程序 this.data与this.setData
一、摘要
小程序中我们会经常使用到this.data与this.setData。其中this.data是用来获取页面data对象的,而this.setData是用来更新界面的。那么他们之间的区别与联系你真的搞懂了吗?
二、正文
this.data可以获取页面data对象,但是它返回的对象到底是新的对象还是仅仅只是一个引用呐。这个很关键,在日常开发中很可能因为不知道或者是自己的疏忽导致bug,而且很难排查原因。带着这个疑问我们来做一下试验。由于时间比较紧,博主就不单独写demo了,项目中可能有大量其它代码干扰我们分析,还请见谅。
var data = this.data.swiperItems[currentSwiper];
这行代码使用this.data获取了我需要的对象,并且赋值给data变量,下面分别打印data和this.data的相应对象。
可以看到这两个对象的内容是一致的。下面我将在data变量中添加一个test字段,然后再看这两者的打印结果。注意我并不会对this.data操作。
可以看到他们都发生了变换,所以这是浅拷贝,也就是两个变量指向了同一片存储区域,无论通过哪个变量操作这片存储区域,相应的两个变量得出的值都会变换。为了继续证明我们的猜想是正确的,下面我只操作this.data而不操作data。
跟我们预想的一样,即使我先赋值后加字段,data得出的结果也是被修改了的。
可能有人会问,那为啥用使用this.setData后才能看到界面的变换呢?至于this.setData我们可以看成是更新界面,并且貌似this.setData里面又托管了一个this.data的副本。因为在我改变this.data后立马去执行
this.setData({});
界面并不会更新,这就说明我们需要更新this.setData管理的那个数据对象才能更新界面,而界面真正加载的数据也是来自那里。想要知道具体怎么实现的,那就要去看源代码了。
三、结论
总结一下就是:this.data与this.setData的关系就是this.setData里面存储的是this.data的副本,而界面是从this.setData里面托管的this.data的副本取数据的。所以我们更改this.data并不会直接更新界面,因为这个时候的this.setData里面的副本还是没有更新前的。
转载于:https://www.cnblogs.com/dekevin/p/10248480.html
微信小程序 this.data与this.setData相关推荐
- 微信小程序关于for循环之后setData
微信小程序关于for循环之后setData Page({/*** 页面的初始数据*/data: {types: [],select: '',goods:[]},onLoad: function (op ...
- 微信小程序报Cannot read property ‘setData‘ of undefined的错误
微信小程序报Cannot read property 'setData' of undefined的错误 最近在学习开发微信小程序,记录下项目中遇到的一个报错. 具体报错如下: 这时打印下this发现 ...
- [微信小程序]给data的对象的属性赋值
有问题可以扫码加我微信,有偿解决问题.承接小程序开发. 微信小程序开发交流qq群 173683895 . 526474645 : 正文: <view wx:for="{{lei ...
- 微信小程序this.data赋值时,页面视图层没有同步更新
问题: 我在开发微信小程序中,this.data进行赋值时,页面视图层没有同步更新; 原因: 其中this.data是用来获取页面data对象的: setData()函数用于将逻辑层数据发送到视图层, ...
- 微信小程序报Cannot read property 'setData' of undefined的错误
最近在学习微信小程序的开发,让我吐槽的是,都9102年了,怎么还是有有时不能复制,有时不能打中文的bug呢,这个时候,你可以Ctrl+shift+w一下,如果还不行,那就得重启了.. 进入正题吧,刚在 ...
- 微信小程序之Data当前日期坑 安卓 ios日期不对
获取当前日期. var userDate = new Date().toLocaleDateString() 注意:微信小程序中 手机的地区版本差异会导致不同的格式 从而出现一些日期的计算出现差错 所 ...
- 微信小程序开发避免频繁的setData调用
使用mpvue开发小程序,这时候得注意,对Page对象的data里面赋值的时候,实际上mpvue是讲它转化成了setData()的调用.这时候得注意,避免频繁的setData赋值操作,对性能的开销太大 ...
- 微信小程序input批量赋值(setData)
data如下: data: {model: {paymentAccount: '', //付款帐号amount: '', //付款金额paymentTime: '', //付款时间remark: '' ...
- 微信小程序wx.request内调用setData方法
附上源码 login.wxml文件 <!--pages/login/login.wxml--><form bindsubmit="formSubmit" bind ...
- 微信小程序之回调函数中用setData
起因: 想在某个回调函数中用setData 改变值 出错的代码: Page({data: {userinfo : 'notknow'},getuser1 : function(){console.lo ...
最新文章
- Confluence 6 计划任务
- unity3D 4.6及以上版本. UI穿透问题,以及模拟器不穿透真机穿透问题解决方案
- 基于 Kubernetes 的边缘云原生
- Spring MVC讲解
- hunnu---11547 你的组合数学学得如何?
- google +按钮_如何禁用或改善Google的Google+集成
- Codeforces Round #715 (Div. 1) B. Almost Sorted 找规律
- JavaSE学习脑图
- 【新手基础教程】maix asr(自动语音识别)
- 关于保险的“损失补偿原则”
- 百度磁盘搜索和git、ssh的试用
- 设置电脑的背景颜色为保护色
- 黑群晖折腾之docker系列之迅雷远程下载
- 华为发放20亿元奖金,抗击美国断供,奖励员工加班奋斗,网友:他们应得的...
- CVE PoC的精选列表(三)
- 基于LLVM编译器的IDA自动结构体分析插件
- excel毫秒、微妙运算
- 苹果8plus什么用计算机,iphone8plus怎么把手机投屏到电脑显示器
- WEB漏洞-逻辑越权之登录脆弱及支付修改
- iphone忘记锁屏密码解决办法