微信小程序中的 this.setData()

微信小程序中的 this.setData(),第1张

在小程序中使用this.setData()方法是非常常见的,通过这个方法,可以将data中的变量进行赋值扮升尺.那么如果遇到下面这种情况:

如果此时我想修改 belineData 对象下的 name 的值,我们可以这样 *** 作

这样就可以把字符串赋值给对象下的 name 属性

这个时候,我们需要给 belineData 数组下的第一个对象赋值的话.大概脑子里想的应笑旦该是:

然后,我们会发现,这样写并不行厅高.而要通过ES6的标识符来实现

使用变量的部分要 ${} 套用起来就可以了.

一般setData方法多用于点击后改变页面信息或者刷新后与后台交互获取最新的洞察信息

注意:

直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致

单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据。

方法如下:

js:

Page({  data: {

   text: 'init data',

   num: 0,

   array: [{text: 'init data'}],    object: {

     text: 'init data'

   }

 },

 changeText: function() {    // this.data.text = 'changed data'  // bad, it can not work

   this.setData({

     text: 'changed data'

   })

 },

 changeNum: function() {  森颤滑  this.data.num = 1

   this.setData({

     此腊num: this.data.num

   })

 },

 changeItemInArray: function() {    // you can use this way to modify a danamic data path

   this.setData({      'array[0].text':'changed data'

   })

 },

 changeItemInObject: function(){    this.setData({      'object.text': 'changed data'

   })

 },

 addNewField: function() {    this.setData({      'newField.text': 'new data'

   })

 }

})

wxml:

<view>{{text}}</view><button bindtap="changeText">Change normal data </button><view>{{num}}</view><button bindtap="changeNum">Change normal num </button><view>{{array[0].text}}</view><button bindtap="changeItemInArray">Change Array data </button><view>{{object.text}}</view><button bindtap="changeItemInObject">Change Object data </button><view>{{newField.text}}</view><button bindtap="addNewField">Add new data </button>

一般来说,小程序下拉加载数据,用合并数组的方式(concat)然后再setData新的数组,这种方式只是试用数据量小的时候,为什么这么说,因为小程序的setData有一个限制,每次setData数据不能超过1024kb,大家可以想象一下,如果用concat合并产生新数组,并保存新数组为下一次加载的原数组,那么数量孙模大的时候肯定会出现数据的大小超过1024KB的限制,那么这种问题该怎么解决呢,说解决方法的时候渣洞先了解下小程序渲染的过程

这可以这样理解小程序已经把数据和视图绑定了起来,众所周知vue是数据双向绑定的,数据改变,视图也会相应的改变,而上面的那段话是不是可以理解为小程序也是双向绑定的,

在vue里修改数据可以写 this.a = b

小程序里修改数据需要  this.setData({"key":value})

那我们是不是可以这样理解在小程序修改数据的时候只是调用setData方法修改了定义中的变量,

跟vue中this.a = b 是一样的性质而只是写法不一样

明白了,这一点,说解决方法。。。

上面说了数据量大如凯枯的时候不能用concat的原因,那我们这时候该怎么解决,只是我们可以想,既然数据和视图绑定在一起了,我们是不是可以用一个二维数组解决这个问题

大概思路是这样的

1,在data里定义一个空数组,

2,获取下拉数据

3,把获取的数组,this.setData上面定义的数组

例如this.setData({

    [`arr[${b}]`]:res.data

})

这样就避免了setData数据过大而不报错的问题。

这时候数组发生了改变视图也会相应的改变,不过这样可能会出现一个问题,如果加载数据过多的时候视图会出现渲染层失败,


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12405627.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存