W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
任何頁(yè)面變化都會(huì)觸發(fā) setData,同一時(shí)間可能會(huì)有多個(gè) setData 觸發(fā)頁(yè)面進(jìn)行重新渲染。如下四個(gè)接口都會(huì)觸發(fā) web-view 頁(yè)面重新渲染。
推薦指定路徑設(shè)置數(shù)據(jù)
this.setData({
'array[0]': 1,
'obj.x':2,
});
不推薦如下用法(雖然拷貝了this.data, 仍然直接更改了其屬性)
const array = this.data.array.concat();
array[0] = 1;
const obj={...this.data.obj};
obj.x=2;
this.setData({array,obj});
更不推薦直接更改 this.data(違反不可變數(shù)據(jù)原則)
this.data.array[0]=1;
this.data.obj.x=2;
this.setData(this.data)
長(zhǎng)列表使用 $spliceData
this.$spliceData({ 'a.b': [1, 0, 5, 6] })
有時(shí)業(yè)務(wù)邏輯封裝到了組件中,當(dāng)組件 UI 需要重新渲染時(shí),只需在組件內(nèi)部調(diào)用 setData。但有時(shí)需要從頁(yè)面觸發(fā)組件重新渲染,比如在頁(yè)面上監(jiān)聽了 onPageScroll 事件,當(dāng)事件觸發(fā)時(shí),需要通知對(duì)應(yīng)組件重新渲染,此時(shí)的處理措施如下所示:
// pages/index/index.jsPage({
onPageScroll(e) {
if (this.xxcomponent) {
this.xxcomponent.setData({
scrollTop: e.scrollTop })
}
}
})
// components/index/index.jsComponent({
didMount(){
this.$page.xxcomponent = this;
}
})
可在組件的 didMount 中將組件掛載到對(duì)應(yīng)的頁(yè)面上,即可在頁(yè)面中調(diào)用組件級(jí)別的 setData 只觸發(fā)組件重新渲染。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: