亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

小程序中this.setData的使用和注意事項(xiàng)

 更新時(shí)間:2019年08月28日 13:49:40   作者:zxin1210  
這篇文章主要介紹了微信小程序中this.setData的使用和注意事項(xiàng),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

前言:微信小程序中經(jīng)常需要用到this.setData({})把變量值渲染到視圖層,那到底什么是this.setData,如何使用?需要注意哪些?作為一個(gè)初學(xué)者,分享一點(diǎn)我的經(jīng)驗(yàn),希望大家批評(píng)指正。

  介紹:setData函數(shù)主要用于將邏輯層數(shù)據(jù)發(fā)送到視圖層,同時(shí)對(duì)應(yīng)的改變this.data.x的值。

  參數(shù):Object 以 key : value 的形式表示,將 this.data 中的 key 對(duì)應(yīng)的值改變成 value。

使用:先給出代碼,wxss沒(méi)有什么意義就不貼了

index.wxml

 <view class="numview">test01======={{test01}}</view>
 <view class="numview">test02======={{test02}}</view>
 <button bindtap="testfun">測(cè)試</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() {},
})

  此時(shí)經(jīng)過(guò)編譯后模擬器的顯示:

 

  這里都容易理解,當(dāng)點(diǎn)擊了button按鈕后,觸發(fā)點(diǎn)擊事件執(zhí)行testfun函數(shù),將test02設(shè)置為8,如圖:

  通過(guò)this.data.test02=8這種方式直接賦值可以嗎,答案是不可以,看下面:

使用this.data.test02=10的結(jié)果不會(huì)渲染到前臺(tái)頁(yè)面中顯示,但是后臺(tái)已經(jīng)改變,會(huì)造成前后臺(tái)數(shù)據(jù)不一致。

我又想到是不是可以先通過(guò)this.data.test02=10賦值,再通過(guò)this.setData渲染呢?

 onLoad: function() {
  this.data.test02 = 10;
  this.setData({
   test02
  })
 }

編譯報(bào)錯(cuò):test02 is not defined;

為什么呢?再進(jìn)行一項(xiàng)測(cè)試:

  onLoad: function() {
   this.data.test02 = 10;
   var test03 = 20;
   this.setData({
    test03
   })
   console.log(this.data.test03)
  }

編譯后顯示:

發(fā)現(xiàn)了什么?我個(gè)人覺(jué)得是這樣的:

一、this.setData中設(shè)置的key如果只有key沒(méi)有value,則從所在函數(shù)內(nèi)找這個(gè)變量,找到之后渲染到前臺(tái)指定位置。

?。?)如果Page對(duì)象的data中沒(méi)有定義該key,則setData自動(dòng)創(chuàng)建,這個(gè)可以從打印結(jié)果中發(fā)現(xiàn)(this.data.test03,data中沒(méi)有定義)。

?。?)如果Page對(duì)象的data中已經(jīng)定義該變量,則修改data中原變量的值。

二、this.setData中設(shè)置的key如果有key有value,直接渲染到前臺(tái)并修改原data中的數(shù)據(jù)。

注意事項(xiàng):

上面演示的使用說(shuō)明也算是注意事項(xiàng)吧,理解透徹才能運(yùn)用自如,避免數(shù)據(jù)混亂。

另外給出官方的setData建議:https://developers.weixin.qq.com/miniprogram/dev/framework/performance/tips.html

常見(jiàn)的 setData 操作錯(cuò)誤

1. 頻繁的去 setData

在我們分析過(guò)的一些案例里,部分小程序會(huì)非常頻繁(毫秒級(jí))的去setData,其導(dǎo)致了兩個(gè)后果:

Android 下用戶在滑動(dòng)時(shí)會(huì)感覺(jué)到卡頓,操作反饋延遲嚴(yán)重,因?yàn)?JS 線程一直在編譯執(zhí)行渲染,未能及時(shí)將用戶操作事件傳遞到邏輯層,邏輯層亦無(wú)法及時(shí)將操作處理結(jié)果及時(shí)傳遞到視圖層;

渲染有出現(xiàn)延時(shí),由于 WebView 的 JS 線程一直處于忙碌狀態(tài),邏輯層到頁(yè)面層的通信耗時(shí)上升,視圖層收到的數(shù)據(jù)消息時(shí)距離發(fā)出時(shí)間已經(jīng)過(guò)去了幾百毫秒,渲染的結(jié)果并不實(shí)時(shí);

2. 每次 setData 都傳遞大量新數(shù)據(jù)

由setData的底層實(shí)現(xiàn)可知,我們的數(shù)據(jù)傳輸實(shí)際是一次 evaluateJavascript 腳本過(guò)程,當(dāng)數(shù)據(jù)量過(guò)大時(shí)會(huì)增加腳本的編譯執(zhí)行時(shí)間,占用 WebView JS 線程,

3. 后臺(tái)態(tài)頁(yè)面進(jìn)行 setData

當(dāng)頁(yè)面進(jìn)入后臺(tái)態(tài)(用戶不可見(jiàn)),不應(yīng)該繼續(xù)去進(jìn)行setData,后臺(tái)態(tài)頁(yè)面的渲染用戶是無(wú)法感受的,另外后臺(tái)態(tài)頁(yè)面去setData也會(huì)搶占前臺(tái)頁(yè)面的執(zhí)行。

總結(jié)

以上所述是小編給大家介紹的小程序中this.setData的使用和注意事項(xiàng),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

最新評(píng)論