小程序中this.setData的使用和注意事项


Posted in Javascript onAugust 28, 2019

前言:微信小程序中经常需要用到this.setData({})把变量值渲染到视图层,那到底什么是this.setData,如何使用?需要注意哪些?作为一个初学者,分享一点我的经验,希望大家批评指正。

介绍:setData函数主要用于将逻辑层数据发送到视图层,同时对应的改变this.data.x的值。

参数:Object 以 key : value 的形式表示,将 this.data 中的 key 对应的值改变成 value。

使用:先给出代码,wxss没有什么意义就不贴了

index.wxml

<view class="numview">test01======={{test01}}</view>
 <view class="numview">test02======={{test02}}</view>
 <button bindtap="testfun">测试</button>

index.js

Page({
 data: {
  test01: 1,
  test02: 2
 },
 testfun: function() {
  var that = this;
  if (this.data.test01 == 1) {
   that.setData({
    test02:8
   })
   console.log(this.data.test02)
  }
 },
 onLoad: function() {},
})

此时经过编译后模拟器的显示:

 小程序中this.setData的使用和注意事项

这里都容易理解,当点击了button按钮后,触发点击事件执行testfun函数,将test02设置为8,如图:

小程序中this.setData的使用和注意事项

通过this.data.test02=8这种方式直接赋值可以吗,答案是不可以,看下面:

小程序中this.setData的使用和注意事项

使用this.data.test02=10的结果不会渲染到前台页面中显示,但是后台已经改变,会造成前后台数据不一致。

我又想到是不是可以先通过this.data.test02=10赋值,再通过this.setData渲染呢?

onLoad: function() {
  this.data.test02 = 10;
  this.setData({
   test02
  })
 }

编译报错:test02 is not defined;

为什么呢?再进行一项测试:

onLoad: function() {
   this.data.test02 = 10;
   var test03 = 20;
   this.setData({
    test03
   })
   console.log(this.data.test03)
  }

编译后显示:

小程序中this.setData的使用和注意事项

发现了什么?我个人觉得是这样的:

一、this.setData中设置的key如果只有key没有value,则从所在函数内找这个变量,找到之后渲染到前台指定位置。

 (1)如果Page对象的data中没有定义该key,则setData自动创建,这个可以从打印结果中发现(this.data.test03,data中没有定义)。

 (2)如果Page对象的data中已经定义该变量,则修改data中原变量的值。

二、this.setData中设置的key如果有key有value,直接渲染到前台并修改原data中的数据。

注意事项:

上面演示的使用说明也算是注意事项吧,理解透彻才能运用自如,避免数据混乱。

另外给出官方的setData建议:https://developers.weixin.qq.com/miniprogram/dev/framework/performance/tips.html

常见的 setData 操作错误

1. 频繁的去 setData

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

Android 下用户在滑动时会感觉到卡顿,操作反馈延迟严重,因为 JS 线程一直在编译执行渲染,未能及时将用户操作事件传递到逻辑层,逻辑层亦无法及时将操作处理结果及时传递到视图层;

渲染有出现延时,由于 WebView 的 JS 线程一直处于忙碌状态,逻辑层到页面层的通信耗时上升,视图层收到的数据消息时距离发出时间已经过去了几百毫秒,渲染的结果并不实时;

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

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

3. 后台态页面进行 setData

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

总结

以上所述是小编给大家介绍的小程序中this.setData的使用和注意事项,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
Sep 19 Javascript
js字符串截取函数substr substring slice使用对比
Nov 27 Javascript
查询json的数据结构的8种方式简介
Mar 10 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
Apr 11 Javascript
JavaScript访问CSS属性的几种方式介绍
Jul 21 Javascript
jQuery+css实现百度百科的页面导航效果
Dec 16 Javascript
jquery实现横向图片轮播特效代码分享
Nov 19 Javascript
JQuery 封装 Ajax 常用方法(推荐)
May 21 jQuery
jQuery实现动画、消失、显现、渐出、渐入效果示例
Sep 06 jQuery
JS判断两个数组或对象是否相同的方法示例
Feb 28 Javascript
VuePress 中如何增加用户登录功能
Nov 29 Javascript
vue+elementui 实现新增和修改共用一个弹框的完整代码
Jun 08 Vue.js
微信小程序 可搜索的地址选择实现详解
Aug 28 #Javascript
vue实现标签云效果的方法详解
Aug 28 #Javascript
微信小程序通过js实现瀑布流布局详解
Aug 28 #Javascript
TypeScript类型声明书写详解
Aug 28 #Javascript
vue服务端渲染操作简单入门实例分析
Aug 28 #Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
Aug 28 #Javascript
Vue的编码技巧与规范使用详解
Aug 28 #Javascript
You might like
比较时间段一与时间段二是否有交集的php函数
2011/05/31 PHP
phpstorm配置Xdebug进行调试PHP教程
2014/12/01 PHP
PHP的Laravel框架中使用消息队列queue及异步队列的方法
2016/03/21 PHP
form中限制文本字节数js代码
2007/06/10 Javascript
JavaScript对象、属性、事件手册集合方便查询
2010/07/04 Javascript
JavaScript中的细节分析
2012/06/30 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
2013/04/26 Javascript
jqueyr判断checkbox组的选中(示例代码)
2013/11/08 Javascript
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
JavaScript学习笔记之Cookie对象
2015/01/22 Javascript
jQuery代码实现发展历程时间轴特效
2015/07/30 Javascript
js实现跨域的4种实用方法原理分析
2015/10/29 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
JavaScript 模块的循环加载实现方法
2015/12/13 Javascript
JavaScript制作弹出层效果
2016/12/02 Javascript
利用PM2部署node.js项目的方法教程
2017/05/10 Javascript
JavaScript之排序函数_动力节点Java学院整理
2017/06/30 Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
2017/06/30 Javascript
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
Vue.js移动端左滑删除组件的实现代码
2017/09/08 Javascript
微信小程序学习总结(五)常见问题实例小结
2020/06/04 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
2020/07/15 Javascript
微信小程序实现多张图片上传功能
2020/11/18 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
python使用xlrd模块读写Excel文件的方法
2015/05/06 Python
Django数据库操作的实例(增删改查)
2017/09/04 Python
Python制作词云的方法
2018/01/03 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
2018/12/26 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
2020/01/16 Python
python异常处理、自定义异常、断言原理与用法分析
2020/03/23 Python
通信工程专业毕业生推荐信
2013/12/25 职场文书
村官学习十八大感想
2014/01/15 职场文书
退休党员个人对照检查材料思想汇报
2014/09/29 职场文书
调研报告的主要写法
2019/04/18 职场文书
致毕业季:你如何做好自己的职业生涯规划书?
2019/07/01 职场文书
Python 视频画质增强
2022/04/28 Python