在微信小程序中经常会使用到setData函数把变量渲染到视图层,那么什么是setData呢?如何使用?注意事项有些什么?下面我们就来详细了解一下!

正文

  1. setData是小程序开发中使用最频繁的接口,也是最容易引发性能问题的接口。
  2. setData函数用于将数据从逻辑层渲染到视图层(异步),同时改变对应的this.data的值(同步)。

实例1:简单实现点击修改变量值

<text>test:{{test}}</text>
<button bindtap="bindTest">点击改变test值</button>
Page({data: {test: "我是测试变量"},bindTest: function () {console.log("this.data.test:" + this.data.test);this.setData({test: "我是测试变量,我的值被改变了!"})console.log("this.data.test:" + this.data.test);}
})

效果:

实例解析:

  1. 代码很容易理解,点击按钮test变量的值被改变了,通过setData函数渲染到了前端展示。
  2. 另外我在this.setDta前后分别打印出了this.data.test的值,看看最终打印结果:

这里就说明了setData函数渲染到视图层后,会同步修改this.data.test的值。

实例2:动态修改数组指定下标的某个参数值(类似购物车)

<block wx:for="{{test}}" wx:key="index"><view data-index="{{index}}" bindtap="bindTest">{{item.txt}}</view>
</block>
Page({data: {test: [{ txt: "我是1号" },{ txt: "我是2号" },{ txt: "我是3号" }]},bindTest: function (e) {// 被点击的viewlet index = e.currentTarget.dataset.index;// 根据index找到test对应索引中对应要修改的参数let revise = "test[" + index + "].txt";this.setData({[revise]: "呃,我被人给点了!!!"})}
})

效果

实例解析:

  1. 其实这个就是根据index找到test对应索引中对应要修改的参数,然后进行修改并渲染到页面上;
  2. 该功能购物车选中状态、数量更改都可以使用到;
  3. 此方法比使用循环寻找更改然后再渲染,更方便、性能更好!

注意事项

  1. 如果Page对象的data中没有定义该key,则setData自动创建;如有则修改data中原变量的值。
  2. 直接修改this.data,而不调用this.setData(),是无法改变当前页面的状态的,会导致数据不一致。
  3. 使用this.setData({})时,注意this指向问题。 仅支持可以JSON化的数据。
  4. 单次设置的数据不能超过1024KB,尽量避免一次设置过多的数据。
  5. 不要把data中的任何一项的value设为undefined,否则这一项将不能被设置,可能会有潜在的问题。

常见的setData操作错误(官方文档)

1.频繁的去setData

在我们分析过的一些案例里,部分小程序会非常频繁(毫秒级)的去setData,其导致了两个后果:

  1. Android 下用户在滑动时会感觉到卡顿,操作反馈延迟严重,因为 JS线程一直在编译执行渲染,未能及时将用户操作事件传递到逻辑层,逻辑层亦无法及时将操作处理结果及时传递到视图层;
  2. 渲染有出现延时,由于WebView 的 JS 线程一直处于忙碌状态,逻辑层到页面层的通信耗时上升,视图层收到的数据消息时距离发出时间已经过去了几百毫秒,渲染的结果并不实时;

2.每次setData都传递大量新数据

由setData的底层实现可知,我们的数据传输实际是一次evaluateJavascript脚本过程,当数据量过大时会增加脚本的编译执行时间,占用WebView JS线程。

3.后台态页面进行setData

当页面进入后台态(用户不可见),不应该继续去进行setData,后台态页面的渲染用户是无法感受的,另外后台态页面去setData也会抢占前台页面的执行。

微信小程序:setData函数详解及注意事项相关推荐

  1. 微信小程序详解 php,微信小程序列表开发详解

    本文主要和大家分享微信小程序列表开发详解,主要以代码的形式和大家分享,希望能帮助到大家. 一.知识点 (一).列表渲染 wx:for tip:wx:for="array"可以等于参 ...

  2. php小程序地图处理,微信小程序 地图map详解及简单实例

    微信小程序 地图map 微信小程序map 地图属性名类型默认值说明longitudeNumber中心经度 latitudeNumber中心纬度 scaleNumber1缩放级别 markersArra ...

  3. 小程序向Java传值,微信小程序 页面传值详解

    微信小程序 页面传值详解 一. 跨页面传值. 1 . 用 navigator标签传值或 wx.navigator, 比如 这里将good_id=16 参数传入detail页面, 然后detail页面的 ...

  4. 微信小程序详解 php,微信小程序canvas基础详解

    canvas 元素用于在网页上绘制图形.HTML5 的 canvas 元素使用 JavaScript 在网页上绘制2D图像.本文主要和大家分享微信小程序canvas基础详解,希望能帮助到大家. 一.了 ...

  5. 微信小程序底部菜单详解

    微信小程序底部菜单详解 只需要在app.json里面修改配置,即可 {"pages":["pages/index/index","pages/logs ...

  6. php 微信小程序 循环 多选,微信小程序 for 循环详解

    1,wx:for 在组件上使用wx:for控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件.默认数组的当前项的下标变量名默认为index,数组当前项的变量名默认为item 事例如下: wx ...

  7. 微信小程序————setData()方法的使用和注意事项

    微信小程序setData()使用: ##Page.prototype.setData(Object data, Function callback) setData 函数用于将数据从逻辑层发送到视图层 ...

  8. 微信小程序销毁某一注册函数_微信小程序 生命周期函数详解

    微信小程序 生命周期函数 小程序中 判断当前首页是从其他页面返回,还是由入口打开 由于小程序的数据在我们退出小程序时并没有得到释放,因此再次点击开来数据依然没有变成初始化 解决方法:在小程序 data ...

  9. 微信小程序----手势锁详解

    设计思路流程图 1.全局常量 constructor(page,opts){// 初始化全局常量数据this.page = page;this.width = opts.width || 300;th ...

最新文章

  1. 程序设计基本概念(2)-2.19
  2. OCP12C题库,62数据库备份与恢复(admin,install and upgrade accelerated, backup and recovery workshop -62)(新增)
  3. python 效率_Python 运行效率为何低
  4. Python3 - 时间处理与定时任务
  5. Gossip协议详解
  6. 美国计算机科学发展,美国计算机工程发展现状
  7. 树莓派3B+运行arm_computer_library
  8. AngularJS之watch
  9. cuda 编译 linux,Linux下安装Tensorflow源码及编译
  10. httplib java_httplib发布调用错误
  11. C++中 vector(容器)的用法
  12. 谷歌浏览器插件之广告净化器
  13. ApacheCN 编程/大数据/数据科学/人工智能学习资源 2019.12
  14. CSS字体设置中常用字体大全
  15. [嵌入式学习必备网站分享]嵌入式开发必须收藏的二十个网站 内附超链接 实用 嵌入式单片机学习网站
  16. 计算机应用技术职业生涯规划书职业价值观,中职业生涯规划书范文计算机专业职业价值观...
  17. 这是一个关于五台山关于点化顿悟的真实事件,源起偶然,其为必然,一趟旅程获得一份机缘。
  18. mysql连接错误state 08S01
  19. 计量经济学笔记6-Eviews操作-自相关的检验与消除(DW、LM检验与FGLS、广义差分变换)
  20. 疯狂Spring Cloud微服务架构实战

热门文章

  1. 提醒事项同步日历代码
  2. 吉安小吃,好多小时候喜欢的
  3. 独家 | 围绕DeepMind最新AI模型的炒作,忽视了它真正值得注意的地方(附链接)...
  4. 三星s8怎么分屏操作_老用户感动哭了!三星S8获安卓10更新
  5. 文本、Excel、Access数据导入SQL Server2000技巧
  6. linux上使用R保存图片
  7. linux文件系统结构图.jpg
  8. 华为----1-划分vlan
  9. 最近做了个论坛,专门给棋牌爱好者免费下载研究用,带工具教程
  10. codeforces E. Array Shrinking