使用vue-virtual-scroller遇到的問題及解決
問題一
報錯Error in nextTick: “Error: Key is undefined on item (keyField is ‘userid’)”
字面上的意思,keyField的參數(shù)設置不對,導致找不到唯一id,需要設置填充數(shù)據(jù)的唯一key,例如你的數(shù)據(jù)格式是:
list = [ { userId: 1001, username: "xiaoming"}, { userId: 1002, username: "liming"}, ... ]
那么key-field應該設置為userId
<RecycleScroller class="scroller" :items="list" :item-size="32" key-field="userId" v-slot="{ item }" > <div class="user"> {{ item.username }} </div> </RecycleScroller>
問題二
報錯Error in v-on handler: “Error: Rendered items limit reached”
外層div應該設置固定高度,不然虛擬列表不起作用。
<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>
這里我固定高度設置為屏幕高度,在實際使用中,大家可以根據(jù)項目要求設置固定高度。
問題三
虛擬列表只顯示了一部分
這里可能有兩個原因引起:
- 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設置為54,如果DynamicScrollerItem的最小高度設置低于54,可能就只會顯示開頭部分item。
- 2、沒有引入樣式
import 'vue-virtual-scroller/dist/vue-virtual-scroller.css'
沒有引入這個樣式,也會導致item顯示不全。
問題四
有空白的Item
可能大家發(fā)現(xiàn),有些地方的item是空白的。
有空白item的原因就是你使用列表數(shù)據(jù)里面相鄰數(shù)據(jù)有重復的key,拿上面的例子數(shù)據(jù)來說就是連續(xù)兩個重復數(shù)據(jù)的userId是一樣的。
題外話
大家如果想用大量數(shù)據(jù)測試成果,強烈推薦fakerjs,可以創(chuàng)建大量虛假數(shù)據(jù),用于測試虛擬列表。
附上最簡單使用
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(), } }
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
vite前端構建Turborepo高性能monorepo方案
這篇文章主要為大家介紹了vite前端構建Turborepo高性能monorepo方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08vue實現(xiàn)的多頁面項目如何優(yōu)化打包的步驟詳解
這篇文章主要介紹了vue實現(xiàn)的多頁面項目如何優(yōu)化打包的步驟詳解,文中通過示例代碼以及圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2020-07-07element的el-upload組件上傳文件跨域問題的幾種解決
跨域問題網(wǎng)上搜索很多,感覺情況都不一樣,本文主要介紹了element的el-upload組件上傳文件跨域問題的幾種解決,具有一定的參考價值,感興趣的可以了解一下2024-03-03