在小程序中使用this.setData时需要注意哪些事项

  介绍

本篇文章给大家分享的是有关在小程序中使用this.setData时需要注意哪些事项,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

介绍:setData函数主要用于将逻辑层数据发送到视图层,同时对应的改变this.data。x的值。

参数:对象以键:值的形式表示,将这个。数据中关键的对应的值改变成价值。

使用:先给出代码,wxs没有什么意义就不贴了

索引。wxml

, & lt; view 类=皀umview"祝辞test01======={{test01}} & lt;/view>   ,& lt; view 类=皀umview"祝辞test02======={{test02}} & lt;/view>   ,& lt; button  bindtap=皌estfun"在测试& lt;/button>

索引。js

页面({   ,数据:{   test01才能:1,   test02才能:2   },   ,testfun:函数(),{   var 才能;that =,;   if 才能;(this.data.test01 ==, 1), {   ,,that.setData ({   ,,test02:8   ,,})   ,,console.log (this.data.test02)   ,,}   },   ,onLoad:函数(),{},   })

此时经过编译后模拟器的显示:

, 在小程序中使用。setData时需要注意哪些事项

这里都容易理解,当点击了按钮按钮后,触发点击事件执行testfun函数,将test02设置为8,如图:

在小程序中使用。setData时需要注意哪些事项

通过<代码> this.data。test02=8 这种方式直接赋值可以吗,答案是不可以,看下面:

在小程序中使用this.setData时需要注意哪些事项

使用<代码> this.data.test02=10>

我又想到是不是可以先通过<代码> this.data.test02=10> , onLoad:,()函数,{   时间=this.data.test02 才能;10;   this.setData({才能   test02。才能   })才能   以前,}

编译报错:test02不是定义;

为什么呢?再进行一项测试:

,, onLoad:,()函数,{   ,,this.data.test02 =, 10;   ,,var  test03 =, 20;   ,,this.setData ({   ,,test03   ,,})   ,,console.log (this.data.test03)   以前,,}

编译后显示:

在小程序中使用this.setData时需要注意哪些事项

发现了什么?我个人觉得是这样的:

一,。setData中设置的关键如果只有关键没有值,则从所在函数内找这个变量,找到之后渲染到前台指定位置。

(1)如果页面对象的数据中没有定义该键,则setData自动创建,这个可以从打印结果中发现(this.data。test03、数据中没有定义)。

(2)如果页面对象的数据中已经定义该变量,则修改数据中原变量的值。

二,this.setData中设置的关键如果有键有值,直接渲染到前台并修改原数据中的数据。

<强>注意事项:

上面演示的使用说明也算是注意事项吧,理解透彻才能运用自如,避免数据混乱。

另外给出官方的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时需要注意哪些事项