一、摘要
  小程序中我们会经常使用到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相关推荐

  1. 微信小程序关于for循环之后setData

    微信小程序关于for循环之后setData Page({/*** 页面的初始数据*/data: {types: [],select: '',goods:[]},onLoad: function (op ...

  2. 微信小程序报Cannot read property ‘setData‘ of undefined的错误

    微信小程序报Cannot read property 'setData' of undefined的错误 最近在学习开发微信小程序,记录下项目中遇到的一个报错. 具体报错如下: 这时打印下this发现 ...

  3. [微信小程序]给data的对象的属性赋值

     有问题可以扫码加我微信,有偿解决问题.承接小程序开发. 微信小程序开发交流qq群   173683895  . 526474645 : 正文: <view wx:for="{{lei ...

  4. 微信小程序this.data赋值时,页面视图层没有同步更新

    问题: 我在开发微信小程序中,this.data进行赋值时,页面视图层没有同步更新; 原因: 其中this.data是用来获取页面data对象的: setData()函数用于将逻辑层数据发送到视图层, ...

  5. 微信小程序报Cannot read property 'setData' of undefined的错误

    最近在学习微信小程序的开发,让我吐槽的是,都9102年了,怎么还是有有时不能复制,有时不能打中文的bug呢,这个时候,你可以Ctrl+shift+w一下,如果还不行,那就得重启了.. 进入正题吧,刚在 ...

  6. 微信小程序之Data当前日期坑 安卓 ios日期不对

    获取当前日期. var userDate = new Date().toLocaleDateString() 注意:微信小程序中 手机的地区版本差异会导致不同的格式 从而出现一些日期的计算出现差错 所 ...

  7. 微信小程序开发避免频繁的setData调用

    使用mpvue开发小程序,这时候得注意,对Page对象的data里面赋值的时候,实际上mpvue是讲它转化成了setData()的调用.这时候得注意,避免频繁的setData赋值操作,对性能的开销太大 ...

  8. 微信小程序input批量赋值(setData)

    data如下: data: {model: {paymentAccount: '', //付款帐号amount: '', //付款金额paymentTime: '', //付款时间remark: '' ...

  9. 微信小程序wx.request内调用setData方法

    附上源码 login.wxml文件 <!--pages/login/login.wxml--><form bindsubmit="formSubmit" bind ...

  10. 微信小程序之回调函数中用setData

    起因: 想在某个回调函数中用setData 改变值 出错的代码: Page({data: {userinfo : 'notknow'},getuser1 : function(){console.lo ...

最新文章

  1. Confluence 6 计划任务
  2. unity3D 4.6及以上版本. UI穿透问题,以及模拟器不穿透真机穿透问题解决方案
  3. 基于 Kubernetes 的边缘云原生
  4. Spring MVC讲解
  5. hunnu---11547 你的组合数学学得如何?
  6. google +按钮_如何禁用或改善Google的Google+集成
  7. Codeforces Round #715 (Div. 1) B. Almost Sorted 找规律
  8. JavaSE学习脑图
  9. 【新手基础教程】maix asr(自动语音识别)
  10. 关于保险的“损失补偿原则”
  11. 百度磁盘搜索和git、ssh的试用
  12. 设置电脑的背景颜色为保护色
  13. 黑群晖折腾之docker系列之迅雷远程下载
  14. 华为发放20亿元奖金,抗击美国断供,奖励员工加班奋斗,网友:他们应得的...
  15. CVE PoC的精选列表(三)
  16. 基于LLVM编译器的IDA自动结构体分析插件
  17. excel毫秒、微妙运算
  18. 苹果8plus什么用计算机,iphone8plus怎么把手机投屏到电脑显示器
  19. WEB漏洞-逻辑越权之登录脆弱及支付修改
  20. iphone忘记锁屏密码解决办法

热门文章

  1. C程序设计 -- 随笔
  2. 特斯拉model3中控屏怎么关_对话特斯拉首席设计师Franz:设计为效率服务
  3. 牛客网SQL练习题(Mysql-8)
  4. Python(十六):标准库
  5. linux 信号阻塞和信号未决
  6. 就我不坑2 nyoj(简单模拟)
  7. python对象和类_Python面向对象(一)类与对象
  8. 【算法笔记】对两种线性基的理解
  9. 【UVA10603】Fill(优先队列+状态转移)
  10. 中心极限定理_达尔文的进化论正确吗?