小程序中this.setData的使用和注意事項
前言:微信小程序中經(jīng)常需要用到this.setData({})把變量值渲染到視圖層,那到底什么是this.setData,如何使用?需要注意哪些?作為一個初學者,分享一點我的經(jīng)驗,希望大家批評指正。
介紹:setData函數(shù)主要用于將邏輯層數(shù)據(jù)發(fā)送到視圖層,同時對應的改變this.data.x的值。
參數(shù):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() {},
})
此時經(jīng)過編譯后模擬器的顯示:

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

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

使用this.data.test02=10的結果不會渲染到前臺頁面中顯示,但是后臺已經(jīng)改變,會造成前后臺數(shù)據(jù)不一致。
我又想到是不是可以先通過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)
}
編譯后顯示:

發(fā)現(xiàn)了什么?我個人覺得是這樣的:
一、this.setData中設置的key如果只有key沒有value,則從所在函數(shù)內找這個變量,找到之后渲染到前臺指定位置。
(1)如果Page對象的data中沒有定義該key,則setData自動創(chuàng)建,這個可以從打印結果中發(fā)現(xiàn)(this.data.test03,data中沒有定義)。
?。?)如果Page對象的data中已經(jīng)定義該變量,則修改data中原變量的值。
二、this.setData中設置的key如果有key有value,直接渲染到前臺并修改原data中的數(shù)據(jù)。
注意事項:
上面演示的使用說明也算是注意事項吧,理解透徹才能運用自如,避免數(shù)據(jù)混亂。
另外給出官方的setData建議:https://developers.weixin.qq.com/miniprogram/dev/framework/performance/tips.html
常見的 setData 操作錯誤
1. 頻繁的去 setData
在我們分析過的一些案例里,部分小程序會非常頻繁(毫秒級)的去setData,其導致了兩個后果:
Android 下用戶在滑動時會感覺到卡頓,操作反饋延遲嚴重,因為 JS 線程一直在編譯執(zhí)行渲染,未能及時將用戶操作事件傳遞到邏輯層,邏輯層亦無法及時將操作處理結果及時傳遞到視圖層;
渲染有出現(xiàn)延時,由于 WebView 的 JS 線程一直處于忙碌狀態(tài),邏輯層到頁面層的通信耗時上升,視圖層收到的數(shù)據(jù)消息時距離發(fā)出時間已經(jīng)過去了幾百毫秒,渲染的結果并不實時;
2. 每次 setData 都傳遞大量新數(shù)據(jù)
由setData的底層實現(xiàn)可知,我們的數(shù)據(jù)傳輸實際是一次 evaluateJavascript 腳本過程,當數(shù)據(jù)量過大時會增加腳本的編譯執(zhí)行時間,占用 WebView JS 線程,
3. 后臺態(tài)頁面進行 setData
當頁面進入后臺態(tài)(用戶不可見),不應該繼續(xù)去進行setData,后臺態(tài)頁面的渲染用戶是無法感受的,另外后臺態(tài)頁面去setData也會搶占前臺頁面的執(zhí)行。
總結
以上所述是小編給大家介紹的小程序中this.setData的使用和注意事項,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!
相關文章
js實現(xiàn)統(tǒng)計字符串中特定字符出現(xiàn)個數(shù)的方法
這篇文章主要介紹了js實現(xiàn)統(tǒng)計字符串中特定字符出現(xiàn)個數(shù)的方法,涉及javascript針對字符串中字符運算操作相關技巧,需要的朋友可以參考下2016-08-08
JS基于myFocus庫實現(xiàn)各種功能的tab選項卡切換效果
這篇文章主要介紹了JS基于myFocus庫實現(xiàn)各種功能的tab選項卡切換效果,實例演示了JS實現(xiàn)tab嵌套顯示及常用過度效果的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-09-09
JavaScript中for循環(huán)的幾種寫法與效率總結
每個接觸JS的開發(fā)人員都不可避免的與for循環(huán)打交道,畢竟這是遍歷必不可少的工具之一。然而當循環(huán)次數(shù)比較大時,效率問題必須重視。下面這篇文章就主要介紹了JavaScript中幾種for循環(huán)的寫法與效率,需要的朋友可以參考借鑒,下面來一起看看吧。2017-02-02
nullJavascript中創(chuàng)建對象的五種方法實例
今天上午,非常郁悶,有很多簡單基礎的問題搞得我有些迷茫,哎,代碼幾天不寫就忘。目前又不當COO,還是得用心記代碼哦!2013-05-05
基于bootstrap實現(xiàn)廣告輪播帶圖片和文字效果
這篇文章主要介紹了基于bootstrap實現(xiàn)廣告輪播帶圖片和文字效果,效果非常棒,需要的朋友可以參考下2016-07-07

