錯誤原因
由於VUE等框架,我們在邏輯層修改data中的數據后,視圖層(頁面渲染)會跟着發生變化。當然微信小程序也是實現了相同的功能,那么出現錯誤的原因是什么?答案:微信小程序的setData()方法。
常見賦值方式(習慣)導致的錯誤
Page({
data: { isShow: false },
changeStatus(){
console.log(this.data.isShow);
this.data.isShow = true;
console.log(this.data.isShow);
}
})
效果圖

從上邊代碼和效果圖我們可以看出:1、習慣的賦值方式“=”在邏輯層是起到了作用改變了isShow;2、視圖層的並沒有發生變化。
結論就是常規的“=”賦值方式,在微信小程序中只能改變data中的數據,而不能改變視圖層的數據,那么微信小程序怎么解決這個問題的,setData()方法。
Page.prototype.setData()
setData 函數用於將數據從邏輯層發送到視圖層(異步),同時改變對應的 this.data 的值(同步)。
setData函數做了哪些事情?
- 將數據從邏輯層發送到視圖層—-這個剛好解決我們這里出現的錯誤,視圖層數據的改變
- 改變對應的 this.data 的值—-同時在邏輯層將data中的值改變
Page({
data: {
isShow: false,
isShow1: false
},
changeStatus(){
console.log(this.data.isShow);
this.data.isShow = true;
console.log(this.data.isShow);
},
changeStatus1() {
console.log(this.data.isShow);
this.setData({ isShow:true});
console.log(this.data.isShow);
}
})
效果圖

總結:
- 在開發程序的時候,我們要遵循別人的規則來開發,不要被習慣所左右;
- 熟悉開發文檔,減少這種習慣錯誤(不易被發現);
- 微信小程序開發中,為了減少data和視圖層數據表現不一致,全部采用setData方法修改值。
setData函數注意事項
- 直接修改 this.data 而不調用 this.setData 是無法改變頁面的狀態的,還會造成數據不一致。
- 單次設置的數據不能超過1024kB,請盡量避免一次設置過多的數據。
- 請不要把 data 中任何一項的 value 設為 undefined ,否則這一項將不被設置並可能遺留一些潛在問題。
