使用vue-virtual-scroller遇到的問(wèn)題及解決
問(wèn)題一
報(bào)錯(cuò)Error in nextTick: “Error: Key is undefined on item (keyField is ‘userid’)”
字面上的意思,keyField的參數(shù)設(shè)置不對(duì),導(dǎo)致找不到唯一id,需要設(shè)置填充數(shù)據(jù)的唯一key,例如你的數(shù)據(jù)格式是:
list = [
{ userId: 1001, username: "xiaoming"},
{ userId: 1002, username: "liming"},
...
]
那么key-field應(yīng)該設(shè)置為userId
<RecycleScroller
class="scroller"
:items="list"
:item-size="32"
key-field="userId"
v-slot="{ item }"
>
<div class="user">
{{ item.username }}
</div>
</RecycleScroller>
問(wèn)題二
報(bào)錯(cuò)Error in v-on handler: “Error: Rendered items limit reached”
外層div應(yīng)該設(shè)置固定高度,不然虛擬列表不起作用。
<template>
<div class="main">
<RecycleScroller
class="scroller"
:items="list"
:item-size="32"
key-field="userId"
v-slot="{ item }"
>
<div class="user">
<div>{{ item.username }}</div>
</div>
</RecycleScroller>
</div>
</template>
<style scoped>
.main {
height: 100vh;
}
.scroller {
height: 100%;
}
</style>
這里我固定高度設(shè)置為屏幕高度,在實(shí)際使用中,大家可以根據(jù)項(xiàng)目要求設(shè)置固定高度。
問(wèn)題三
虛擬列表只顯示了一部分
這里可能有兩個(gè)原因引起:
- 1、內(nèi)容的高度低于min-item-size參數(shù)
<DynamicScroller
:items="items"
:min-item-size="54"
keyField="userId"
class="scroller">
<template v-slot="{ item, index, active }">
<DynamicScrollerItem
:item="item"
:active="active"
:size-dependencies="[item.UserName]"
:data-index="index"
class="user">
</DynamicScrollerItem>
</template>
</DynamicScroller>
<style scoped>
.user {
min-height: 54px;//這里不能低于54
padding: 0 12px;
display: flex;
align-items: center;
}
</style>
這里min-item-size設(shè)置為54,如果DynamicScrollerItem的最小高度設(shè)置低于54,可能就只會(huì)顯示開(kāi)頭部分item。
- 2、沒(méi)有引入樣式
import 'vue-virtual-scroller/dist/vue-virtual-scroller.css'
沒(méi)有引入這個(gè)樣式,也會(huì)導(dǎo)致item顯示不全。
問(wèn)題四
有空白的Item
可能大家發(fā)現(xiàn),有些地方的item是空白的。
有空白item的原因就是你使用列表數(shù)據(jù)里面相鄰數(shù)據(jù)有重復(fù)的key,拿上面的例子數(shù)據(jù)來(lái)說(shuō)就是連續(xù)兩個(gè)重復(fù)數(shù)據(jù)的userId是一樣的。

題外話
大家如果想用大量數(shù)據(jù)測(cè)試成果,強(qiáng)烈推薦fakerjs,可以創(chuàng)建大量虛假數(shù)據(jù),用于測(cè)試虛擬列表。
附上最簡(jiǎn)單使用
1、下載依賴
npm install --save-dev @faker-js/faker
2、生成數(shù)據(jù)
import { faker } from '@faker-js/faker'
Array.from({ length: 10000 }).forEach(() => {
this.list.push(createRandomUser())
})
createRandomUser() {
return {
userId: faker.datatype.uuid(),
username: faker.internet.userName(),
}
}
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue實(shí)現(xiàn)在頁(yè)面上添加水印的示例代碼
這篇文章主要給大家介紹一下vue實(shí)現(xiàn)在頁(yè)面上添加水印的實(shí)例,文中有詳細(xì)的代碼示例供大家參考,具有一定的參考價(jià)值,感興趣的小伙伴跟著小編一起來(lái)看看吧2023-12-12
vite前端構(gòu)建Turborepo高性能monorepo方案
這篇文章主要為大家介紹了vite前端構(gòu)建Turborepo高性能monorepo方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
vue實(shí)現(xiàn)的多頁(yè)面項(xiàng)目如何優(yōu)化打包的步驟詳解
這篇文章主要介紹了vue實(shí)現(xiàn)的多頁(yè)面項(xiàng)目如何優(yōu)化打包的步驟詳解,文中通過(guò)示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
Vue?Steam同款登錄驗(yàn)證數(shù)字輸入框功能
這篇文章主要介紹了Vue?Steam同款登錄驗(yàn)證數(shù)字輸入框功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-03-03
element的el-upload組件上傳文件跨域問(wèn)題的幾種解決
跨域問(wèn)題網(wǎng)上搜索很多,感覺(jué)情況都不一樣,本文主要介紹了element的el-upload組件上傳文件跨域問(wèn)題的幾種解決,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
vue 純js監(jiān)聽(tīng)滾動(dòng)條到底部的實(shí)例講解
今天小編就為大家分享一篇vue 純js監(jiān)聽(tīng)滾動(dòng)條到底部的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09

