微信小程序中的this指向問題


最近開發小程序發現一個很奇怪的問題,有些情況下用 this.setData 可以改變視圖顯示,有些情況下使用this.setData無效,需 const that = this; that.setData({ xx }); 使用 that 來保存當前的this狀態,這樣才能更新視圖。下來我們就來解釋一下,微信小程序中的this指向問題。首先我們來看一段錯誤代碼:

handleReadBook(e) {
BMYAPI.api_updateReadsBooks({}, function(err, res) {
if (err) return;
this.setData({ data: res.data.data });
});
},
運行上面代碼,發現this.setData無效,視圖並沒有按照我想要的樣子將data重新賦值渲染。這是因為在上述代碼中,function(err, res){}是一個閉包,不能直接用this來setData。下面是解決這個問題的方案1:

handleReadBook(e) {
const that = this;

BMYAPI.api_updateReadsBooks({}, function(err, res) {
if (err) return;
that.setData({ data: res.data.data });
});
},
上述微信小程序代碼中,將this賦值給that,用that來setData。其實還有另一種解決方案,ES6中的箭頭函數也可以避免這個問題。

handleReadBook(e) {
BMYAPI.api_updateReadsBooks({}, (err, res) => {
if (err) return;
this.setData({ data: res.data.data });
});
},
這樣也是可以成功的。

ES6中的根本沒有自己的this,它的this是繼承外面的,因此內部的this就是外層代碼塊的this。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM