小程序中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 相关文章推荐
js获取提交的字符串的字节数
Feb 09 Javascript
javascript preload&amp;lazy load
May 13 Javascript
JS实现点击链接取消跳转效果的方法
Jan 24 Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
Apr 25 Javascript
使用jQuery的ajax方法向服务器发出get和post请求的方法
Jan 13 Javascript
jQuery实现标签页效果实战(4)
Feb 08 Javascript
vue双向绑定简要分析
Mar 23 Javascript
Vue form 表单提交+ajax异步请求+分页效果
Apr 22 Javascript
在JS循环中使用async/await的方法
Oct 12 Javascript
vue实现点击按钮下载文件功能
Oct 11 Javascript
jQuery 移除事件的方法
Jun 20 jQuery
JavaScript中展开运算符及应用的实例代码
Jan 14 Javascript
微信小程序 可搜索的地址选择实现详解
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
也谈截取首页新闻 - 范例
2006/10/09 PHP
UCenter 批量添加用户的php代码
2012/07/17 PHP
php字符串截取的简单方法
2013/07/04 PHP
PHPUnit安装及使用示例
2014/10/29 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
通过PHP简单实例介绍文件上传
2015/12/16 PHP
PHP读取大文件末尾N行的高效方法推荐
2016/06/03 PHP
创建公共调用 jQuery Ajax 带返回值
2012/08/01 Javascript
JS倒计时代码汇总
2014/11/25 Javascript
多种js图片预加载实现方式分享
2016/02/19 Javascript
JavaScript实现显示函数调用堆栈的方法
2016/04/21 Javascript
详解Angular.js的$q.defer()服务异步处理
2016/11/06 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
ng2学习笔记之bootstrap中的component使用教程
2017/03/09 Javascript
JS组件系列之MVVM组件构建自己的Vue组件
2017/04/28 Javascript
JavaScript中双向数据绑定详解
2017/05/03 Javascript
基于jQuery的$.getScript方法去加载javaScript文档解析
2017/11/08 jQuery
基于vue-cli3+typescript的tsx开发模板搭建过程分享
2020/02/28 Javascript
ant design vue导航菜单与路由配置操作
2020/10/28 Javascript
Vue中使用Echarts仪表盘展示实时数据的实现
2020/11/01 Javascript
wepy--用vantUI 实现上弹列表并选择相应的值操作
2020/11/03 Javascript
[50:12]EG vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python3.0 字典key排序
2008/12/24 Python
快速排序的算法思想及Python版快速排序的实现示例
2016/07/02 Python
python文件绝对路径写法介绍(windows)
2019/12/25 Python
Python如何输出警告信息
2020/07/30 Python
python 对象真假值的实例(哪些视为False)
2020/12/11 Python
AVON雅芳官网:世界上最大的美容化妆品公司之一
2016/11/02 全球购物
比利时家具购买网站:Home24
2019/01/03 全球购物
什么是接口(Interface)?
2013/02/01 面试题
2014年政风行风工作总结
2014/11/22 职场文书
pandas 操作 Excel操作总结
2021/03/31 Python
python中字符串String及其常见操作指南(方法、函数)
2022/04/06 Python
Windows和Linux上部署Golang并运行程序
2022/04/22 Servers
Java+swing实现抖音上的表白程序详解
2022/06/25 Java/Android
前端框架ECharts dataset对数据可视化的高级管理
2022/12/24 Javascript