1. 程式人生 > >微信小程式setData不起作用

微信小程式setData不起作用

setData函式注意事項

  1. 直接修改 this.data 而不呼叫 this.setData 是無法改變頁面的狀態的,還會造成資料不一致。
  2. 單次設定的資料不能超過1024kB,請儘量避免一次設定過多的資料。
  3. 不要把 data 中任何一項的 value 設為 undefined ,否則可能遺留一些潛在問題。

問題背景:

js中有多次調介面來動態修改data資料的操作。

  • 在網上找了很多資料,這是第一個可能犯得錯誤。

click: function (e) {    
    var id = e.target.id//根據點選不同的view獲取對應的id值
    var str = "isChecked[" + id + "]"//重點在這裡,組合出一個字串
    this.setData({
      [str]: false//用中括號把str括起來即可
    })
}

需要用中括號把str括起來

  • 實際上還有個隱藏很深的bug。

在onLoad裡,我set了一個catitems的陣列結構

      success:function(res){
        var cateItems = res.data.data.msg
        that.setData({
          cateItems:cateItems,
          cur_class_id: cateItems[0].class_id
        })
      },

我想要的catItems是這樣子的。

cateItems: [
      {
        class_id: 1,
        class_name: "樣機",
        ishaveChild: true,
        children:
        [
          {
            id: 1,
            name: 'Seastone-RP1',
            image: "../../images/equipment/Desktop/seastone.jpg"
          },
        ]
      },
]

但是在onLoad裡我只設定了class_id和class_name,其他資料動態在其他函式裡獲取。

也就是將其他的資料設定成了undefined。

這就導致了我後續在setData操作一直未把資料傳遞給試圖。而我在打log(this.data)時,微信的開發者工具打印出來的都是正確的cateItems的結構。害得我除錯了好久。