微信小程式setData不起作用
阿新 • • 發佈:2019-02-18
setData函式注意事項
- 直接修改 this.data 而不呼叫 this.setData 是無法改變頁面的狀態的,還會造成資料不一致。
- 單次設定的資料不能超過1024kB,請儘量避免一次設定過多的資料。
- 不要把 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的結構。害得我除錯了好久。