百度智能小程序 循環(huán)

2020-09-05 15:17 更新

s-for

通過循環(huán)渲染列表是常見的場景,在元素上作用 s-for 指令,我們可以渲染一個列表。

默認(rèn)情況

默認(rèn)不寫情況下,下標(biāo)索引是為 index,數(shù)組當(dāng)前變量名默認(rèn)為 item。

代碼示例

<!-- for-demo.swan-->
<view>
    <view s-for="persons">
        {{index}}: {{item.name}}
    </view>
</view>
// for-demo.js
Page({
    data: {
        persons: [
            {name: 'Curry'},
            {name: 'Thompson'},
            {name: 'Durant'},
            {name: 'Green'},
            {name: 'Cousins'}
        ]
    }
});

簡寫

通過簡寫的方式,指定下標(biāo)索引和數(shù)組當(dāng)前變量名。

代碼示例

<!-- for-demo.swan-->
<view>
    <view s-for="p,index in persons">
        {{index}}: {{p.name}}
    </view>
</view>

也可以通過使用 s-for-index 來指定下標(biāo)索引,s-for-item 來指定數(shù)組當(dāng)前變量名。

<!-- for-demo.swan-->
<view>
    <view s-for="persons" s-for-index="idx" s-for-item="p">
        {{idx}}: {{p.name}}
    </view>
</view>

trackBy

如果列表中的項目會動態(tài)地增加、刪除,并且希望列表中的項目保持自己的特征和狀態(tài)(例如 input 中的輸入內(nèi)容),需要在 s-for 指令聲明中指定 trackBy。

trackBy 后跟的值可以是 s-for 的 array 中 item 本身或者其屬性(如 item.id),該值需要是列表中唯一的字符串或數(shù)字,且不能動態(tài)改變。

當(dāng)數(shù)據(jù)更新觸發(fā)重新渲染時,將自動跟蹤項的變更,原先列表內(nèi)的項位置會移動,新添加的項會被渲染,以確保組件保持自身的狀態(tài),并且省去一部分重新渲染帶來的消耗。

代碼示例 

在開發(fā)者工具中打開
<input s-for="list trackBy item" placeholder="請輸入內(nèi)容" />
<button bindtap="delete">刪除首項</button>
Page({
    data: {
        list: [1, 2, 3, 4]
    },
    delete() {
        const list = this.data.list
        console.log('當(dāng)前刪除項目 id', list.splice(0, 1)[0])
        this.setData({list})
    }
})

Tips:

當(dāng)循環(huán)渲染自定義組件列表時,不指定 trackBy 而動態(tài)增刪數(shù)組中的元素,可能會導(dǎo)致調(diào)用錯誤的 attached detached 生命周期函數(shù)。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號