前言:微信小程序中常常須要用到this.setData({})把變量值渲染到視圖層,那到底什麼是this.setData,如何使用?須要注意哪些?做爲一個初學者,分享一點個人經驗,但願你們批評指正。javascript
介紹:setData函數主要用於將邏輯層數據發送到視圖層,同時對應的改變this.data.x的值。java
參數: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.jsxss
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() {}, })
此時通過編譯後模擬器的顯示:ide
這裏都容易理解,當點擊了button按鈕後,觸發點擊事件執行testfun函數,將test02設置爲8,如圖:函數
經過this.data.test02=8
這種方式直接賦值能夠嗎,答案是不能夠,看下面:測試
使用this.data.test02=10
的結果不會渲染到前臺頁面中顯示,可是後臺已經改變,會形成先後臺數據不一致。this
我又想到是否是能夠先經過this.data.test02=10
賦值,再經過this.setData渲染呢?
onLoad: function() { this.data.test02 = 10; this.setData({ test02 }) }
編譯後顯示:
發現了什麼?我我的以爲是這樣的:
1、this.setData中設置的key若是隻有key沒有value,則從所在函數內找這個變量,找到以後渲染到前臺指定位置。
(1)若是Page對象的data中沒有定義該key,則setData自動建立,這個能夠從打印結果中發現(this.data.test03,data中沒有定義)。
(2)若是Page對象的data中已經定義該變量,則修改data中原變量的值。
2、this.setData中設置的key若是有key有value,直接渲染到前臺並修改原data中的數據。
注意事項:
上面演示的使用說明也算是注意事項吧,理解透徹才能運用自如,避免數據混亂。
另外給出官方的setData建議
常見的 setData 操做錯誤
1. 頻繁的去 setData
在咱們分析過的一些案例裏,部分小程序會很是頻繁(毫秒級)的去setData,其致使了兩個後果:
Android 下用戶在滑動時會感受到卡頓,操做反饋延遲嚴重,由於 JS 線程一直在編譯執行渲染,未能及時將用戶操做事件傳遞到邏輯層,邏輯層亦沒法及時將操做處理結果及時傳遞到視圖層;
渲染有出現延時,因爲 WebView 的 JS 線程一直處於忙碌狀態,邏輯層到頁面層的通訊耗時上升,視圖層收到的數據消息時距離發出時間已通過去了幾百毫秒,渲染的結果並不實時;
2. 每次 setData 都傳遞大量新數據
由setData的底層實現可知,咱們的數據傳輸實際是一次 evaluateJavascript
腳本過程,當數據量過大時會增長腳本的編譯執行時間,佔用 WebView JS 線程,
3. 後臺態頁面進行 setData
當頁面進入後臺態(用戶不可見),不該該繼續去進行setData,後臺態頁面的渲染用戶是沒法感覺的,另外後臺態頁面去setData也會搶佔前臺頁面的執行。
總結
以上所述是小編給你們介紹的小程序中this.setData的使用和注意事項,但願對你們有所幫助,若是你們有任何疑問請給我留言,小編會及時回覆你們的。若是你以爲本文對你有幫助,歡迎轉載,煩請註明出處,謝謝!