小程序中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 相关文章推荐
jquery validate使用攻略 第四步
Jul 01 Javascript
jquery链式操作的正确使用方法
Jan 06 Javascript
jquery实现类似淘宝星星评分功能有截图
Sep 15 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
Mar 10 Javascript
js兼容火狐显示上传图片预览效果的方法
May 21 Javascript
JS实现不使用图片仿Windows右键菜单效果代码
Oct 22 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
Nov 07 Javascript
全面解析Bootstrap中form、navbar的使用方法
May 30 Javascript
浅谈JS继承_借用构造函数 &amp; 组合式继承
Aug 16 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
Sep 12 jQuery
一起写一个即插即用的Vue Loading插件实现
Oct 31 Javascript
vue 在服务器端直接修改请求的接口地址
Dec 19 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(1) php开发环境配置
2010/02/15 PHP
用C/C++扩展你的PHP 为你的php增加功能
2012/09/06 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
2016/07/02 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
Javascript &amp; DHTML 实例编程(教程)DOM基础和基本API
2007/06/02 Javascript
jquery imgareaselect 使用利用js与程序结合实现图片剪切
2009/07/30 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
javascript中setAttribute()函数使用方法及兼容性
2015/07/19 Javascript
js控制元素显示在屏幕固定位置及监听屏幕高度变化的方法
2015/08/11 Javascript
使用javaScript动态加载Js文件和Css文件
2015/10/24 Javascript
jQuery中的ready函数与window.onload谁先执行
2016/06/21 Javascript
微信小程序实现缓存根据不同的id来进行设置和读取缓存
2017/06/12 Javascript
vue事件修饰符和按键修饰符用法总结
2017/07/25 Javascript
Sublime Text新建.vue模板并高亮(图文教程)
2017/10/26 Javascript
JavaScript DOM元素常见操作详解【添加、删除、修改等】
2018/05/09 Javascript
layui实现文件或图片上传记录
2018/08/28 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
JavaScript如何实现监听键盘输入和鼠标监点击
2020/07/20 Javascript
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
python3序列化与反序列化用法实例
2015/05/26 Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
2018/05/24 Python
python使用参数对嵌套字典进行取值的方法
2019/04/26 Python
详解opencv中画圆circle函数和椭圆ellipse函数
2019/12/27 Python
pycharm双击无响应(打不开问题解决办法)
2020/01/10 Python
澳大利亚Mocha官方网站:包、钱包、珠宝和配饰
2019/07/18 全球购物
string = null 和string = ''的区别
2013/04/28 面试题
实习公司领导推荐函
2014/05/21 职场文书
贫困生助学金感谢信
2015/01/21 职场文书
三行辞职书范文
2015/02/26 职场文书
停水通知
2015/04/16 职场文书
2015年林业工作总结
2015/05/14 职场文书
学校体育节班级口号
2015/12/25 职场文书
2016高一新生军训心得体会
2016/01/11 职场文书
MYSQL 无法识别中文的永久解决方法
2021/06/03 MySQL
为什么MySQL分页用limit会越来越慢
2021/07/25 MySQL
vue如何清除浏览器历史栈
2022/05/25 Vue.js