手机版

微信小程序中this.data和this.setData区别的详细说明

时间:2021-08-29 来源:互联网 编辑:宝哥软件园 浏览:

一.总结

我们经常在小程序中使用这个. data和这个. setData。This.data用于获取页面数据对象,this.setData用于更新接口。那么你真的了解它们之间的区别和联系吗?

Page.prototype.setData()

setData函数用于将数据从逻辑层发送到视图层,并更改该数据的相应值。

注意:

直接修改this.data是无效的,不能改变页面的状态,也会造成数据不一致。数据集一次不能超过1024kB。请尽量避免一次设置太多数据。二、正文

This.data可以获取页面数据对象,但是它返回的对象是新对象还是仅仅是引用?这很关键。在日常开发中,bug可能是由于无知或疏忽造成的,很难检查原因。带着这个问题,我们来做一个实验。因为时间短,博主不会单独写demo。项目中可能还有很多其他代码会干扰我们的分析。请原谅我。

var data=this . data . swiperitems[CurrentSwifer];这一行代码使用这个. data来获取我需要的对象,并将其分配给数据变量。相应的数据对象和这个数据分别打印在下面。

可以看到这两个对象的内容是一致的。接下来,我将向数据变量添加一个测试字段,然后查看两者的打印结果。请注意,我不会对此数据进行操作

可以看出它们都发生了变化,所以这是一个浅拷贝,即两个变量指向同一个存储区,无论哪个变量操作这个存储区,对应的两个变量得到的值都会发生变化。为了继续证明我们的猜测是正确的,我只会操作这个. data而不是data。

正如我们所料,即使我先赋值,然后添加字段,数据的结果也会被修改。

有人可能会问,为什么用了这个. setData之后就看不到界面的变化了?至于这个. setData,我们可以把它想象成一个更新接口,看起来这个. setData托管了一个这个. Data的副本,因为我一更改这个. Data,我就会马上执行它。

this . setdata({ });接口不会更新,这意味着我们需要更新this.setData管理的数据对象来更新接口,接口实际加载的数据就来自那里。如果你想知道如何实现,你应该看看源代码。

三.结论

总而言之,this.data和this.setData之间的关系是,this.setData存储this.data的副本,而接口从this.data的副本中检索数据.因此,如果我们更改this.data,我们将不会直接更新接口,因为此时this.setData中的副本仍然没有更新。

好了,这就是本文的全部内容。希望本文的内容对你的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。

版权声明:微信小程序中this.data和this.setData区别的详细说明是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。