小程序中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函数获取html中className所在的内容并去除标签
Sep 08 Javascript
JS实现点击图片在当前页面放大并可关闭的漂亮效果
Oct 18 Javascript
JQuery标签页效果实例详解
Dec 24 Javascript
js贪吃蛇游戏实现思路和源码
Apr 14 Javascript
第二章之Bootstrap 页面排版样式
Apr 25 Javascript
JS打印组合功能
Aug 04 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
Dec 20 Javascript
JavaScript拖动层Div代码
Mar 01 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
May 15 Javascript
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
Aug 28 Javascript
浅谈VUE中演示v-for为什么要加key
Jan 16 Javascript
jQuery实现增删改查
Dec 22 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
php 之 没有mysql支持时的替代方案
2006/10/09 PHP
phpmyadmin的#1251问题
2006/11/25 PHP
php判断正常访问和外部访问的示例
2014/02/10 PHP
PHP面向对象程序设计之类常量用法实例
2014/08/20 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
2016/05/17 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
PHP进阶学习之垃圾回收机制详解
2019/06/18 PHP
JavaScript 不只是脚本
2007/05/30 Javascript
ExtJS的FieldSet的column列布局
2009/11/20 Javascript
读jQuery之九 一些瑕疵说明
2011/06/21 Javascript
获取offsetTop和offsetLeft值的js代码(兼容)
2013/04/16 Javascript
javascript实现div的显示和隐藏的小例子
2013/06/25 Javascript
浅析node连接数据库(express+mysql)
2015/11/30 Javascript
js实现页面跳转的几种方法小结
2016/05/16 Javascript
JavaScript中用let语句声明作用域的用法讲解
2016/05/20 Javascript
javascript实现非常简单的小数取整功能示例
2017/06/13 Javascript
小程序云开发部署攻略(图文教程)
2018/10/30 Javascript
微信小程序实现左右列表联动
2020/05/19 Javascript
vue项目打包上传github并制作预览链接(pages)
2019/04/19 Javascript
layui表单验证select下拉框实现验证的方法
2019/09/05 Javascript
webpack的tree shaking的实现方法
2019/09/18 Javascript
vue 图片裁剪上传组件的实现
2020/11/12 Javascript
Python基于TCP实现会聊天的小机器人功能示例
2018/04/09 Python
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
执行Django数据迁移时报 1091错误及解决方法
2019/10/14 Python
python中如何打包用户自定义模块
2020/09/23 Python
python 用struct模块解决黏包问题
2020/11/07 Python
联谊活动策划书
2014/01/26 职场文书
英语国培研修感言
2014/02/13 职场文书
法律进机关实施方案
2014/03/12 职场文书
思想作风整顿个人剖析材料
2014/10/06 职场文书
淘宝文案策划岗位职责
2015/04/14 职场文书
《唯一的听众》教学反思
2016/02/18 职场文书
2016年大学生社区服务活动总结
2016/04/06 职场文书
php 原生分页
2021/04/01 PHP
Vue和Flask通信的实现
2021/05/19 Vue.js