小程序中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 1.4.2发布!主要是性能与API
Feb 25 Javascript
用jquery实现下拉菜单效果的代码
Jul 25 Javascript
js页面跳转的问题(跳转到父页面、最外层页面、本页面)
Aug 14 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
Jun 25 Javascript
jQuery中trigger()与bind()用法分析
Dec 18 Javascript
JS模拟超市简易收银台小程序代码解析
Aug 18 Javascript
seajs中最常用的7个功能、配置示例
Oct 10 Javascript
Angular搜索场景中使用rxjs的操作符处理思路
May 30 Javascript
Vue项目中跨域问题解决方案
Jun 05 Javascript
vue实现未登录跳转到登录页面的方法
Jul 17 Javascript
用jQuery将JavaScript对象转换为querystring查询字符串的方法
Nov 12 jQuery
jQuery 判断元素是否存在然后按需加载内容的实现代码
Jan 16 jQuery
微信小程序 可搜索的地址选择实现详解
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
phpinfo 系统查看参数函数代码
2009/06/05 PHP
apache+php+mysql安装配置方法小结
2010/08/01 PHP
php语言的7种基本的排序方法
2020/12/28 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
php 中phar包的使用教程详解
2018/10/26 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
2019/10/15 PHP
ExtJs之带图片的下拉列表框插件
2010/03/04 Javascript
JQuery文字列表向上滚动的代码
2013/11/13 Javascript
jquery模拟LCD 时钟的html文件源代码
2014/06/16 Javascript
Javascript this 关键字 详解
2014/10/22 Javascript
javascript实现仿百度图片的瀑布流加载效果
2016/04/20 Javascript
vue.js 初体验之Chrome 插件开发实录
2017/05/13 Javascript
微信小程序开发之改变data中数组或对象的某一属性值
2018/07/05 Javascript
Vue CLI3.0中使用jQuery和Bootstrap的方法
2019/02/28 jQuery
通过说明与示例了解js五种设计模式
2019/06/17 Javascript
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
Python中获取对象信息的方法
2015/04/27 Python
python爬虫headers设置后无效的解决方法
2017/10/21 Python
Python实现矩阵转置的方法分析
2017/11/24 Python
基于Python中capitalize()与title()的区别详解
2017/12/09 Python
Python unittest模块用法实例分析
2018/05/25 Python
Python自定义一个类实现字典dict功能的方法
2019/01/19 Python
Django对数据库进行添加与更新的例子
2019/07/12 Python
python如何使用jt400.jar包代码实例
2019/12/20 Python
pandas中ix的使用详细讲解
2020/03/09 Python
css3边框_动力节点Java学院整理
2017/07/11 HTML / CSS
美国求婚钻戒网站:Super Jeweler
2016/08/27 全球购物
美国本地交易和折扣网站:LocalFlavor.com
2017/10/26 全球购物
切尔西足球俱乐部官方网上商店:Chelsea FC
2019/06/17 全球购物
关于Java String的一道面试题
2013/09/29 面试题
办公室副主任岗位职责
2013/11/25 职场文书
干部选拔任用方案
2014/05/26 职场文书
村创先争优活动总结
2014/08/28 职场文书
2015年银行工作总结范文
2015/04/01 职场文书
Python中基础数据类型 set集合知识点总结
2021/08/02 Python