小程序中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 相关文章推荐
项目实践之javascript技巧
Dec 06 Javascript
js innerHTML 的一些问题的解决方法
Jun 22 Javascript
扩展easyui.datagrid,添加数据loading遮罩效果代码
Nov 02 Javascript
js模仿php中strtotime()与date()函数实现方法
Aug 11 Javascript
浅谈vue-cli加载不到dev-server.js的解决办法
Nov 24 Javascript
vue仿element实现分页器效果
Sep 13 Javascript
使用ESLint禁止项目导入特定模块的方法步骤
Mar 04 Javascript
关于Vue源码vm.$watch()内部原理详解
Apr 26 Javascript
javascript中this的用法实践分析
Jul 29 Javascript
解决layui批量传值到后台操作时出现传值为空的问题
Sep 28 Javascript
vue 在单页面应用里使用二级套嵌路由
Dec 19 Vue.js
原型和原型链 prototype和proto的区别详情
Nov 02 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
虹吸式咖啡探讨–研磨
2021/03/03 冲泡冲煮
开发大型PHP项目的方法
2006/10/09 PHP
以文本方式上传二进制文件的PHP程序
2006/10/09 PHP
php eval函数用法总结
2012/10/31 PHP
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
2017/03/13 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
2017/08/03 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
TinyMCE 新增本地图片上传功能
2010/11/05 Javascript
js二级地域选择的实现方法
2013/06/17 Javascript
使用jquery制作弹出框效果
2015/04/03 Javascript
JS中取二维数组中最大值的方法汇总
2016/04/17 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
2016/08/03 Javascript
javascript for循环性能测试示例
2019/08/07 Javascript
js基础之事件捕获与冒泡原理
2019/10/09 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
2020/07/27 Javascript
如何用JS模拟实现数组的map方法
2020/07/30 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
状态机的概念和在Python下使用状态机的教程
2015/04/11 Python
python实现中文分词FMM算法实例
2015/07/10 Python
Python网络爬虫神器PyQuery的基本使用教程
2018/02/03 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
2018/04/11 Python
Flask框架 CSRF 保护实现方法详解
2019/10/30 Python
python实现ftp文件传输系统(案例分析)
2020/03/20 Python
python中实现栈的三种方法
2020/12/19 Python
非常漂亮的CSS3百叶窗焦点图动画
2016/02/24 HTML / CSS
Melissa鞋英国官方网站:Nonnon
2019/05/01 全球购物
行政助理岗位职责范文
2013/12/03 职场文书
大学优秀班集体申报材料
2014/05/23 职场文书
医德医风自我评价
2014/09/19 职场文书
公司离职证明标准格式
2014/11/18 职场文书
婚庆司仪开场白
2015/05/29 职场文书
歌舞青春观后感
2015/06/10 职场文书
老干部座谈会主持词
2015/07/03 职场文书
Redis 操作多个数据库的配置的方法实现
2022/03/23 Redis
使用pd.merge表连接出现多余行的问题解决
2022/06/16 Python