微信小程序----修改data中的數據,頁面數據不改變


錯誤原因

由於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函數做了哪些事情?

  1. 將數據從邏輯層發送到視圖層—-這個剛好解決我們這里出現的錯誤,視圖層數據的改變
  2. 改變對應的 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);
  }
})

效果圖

這里寫圖片描述

總結:

  1. 在開發程序的時候,我們要遵循別人的規則來開發,不要被習慣所左右;
  2. 熟悉開發文檔,減少這種習慣錯誤(不易被發現);
  3. 微信小程序開發中,為了減少data和視圖層數據表現不一致,全部采用setData方法修改值。

setData函數注意事項

  1. 直接修改 this.data 而不調用 this.setData 是無法改變頁面的狀態的,還會造成數據不一致。
  2. 單次設置的數據不能超過1024kB,請盡量避免一次設置過多的數據。
  3. 請不要把 data 中任何一項的 value 設為 undefined ,否則這一項將不被設置並可能遺留一些潛在問題。

其他

我的博客,歡迎交流!

我的CSDN博客,歡迎交流!

微信小程序專欄

前端筆記專欄

微信小程序實現部分高德地圖功能的DEMO下載

微信小程序實現MUI的部分效果的DEMO下載

微信小程序實現MUI的GIT項目地址

微信小程序實例列表

前端筆記列表

游戲列表


免責聲明!

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



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