前言
在开发过程中,遇到要请求几千行数据的需求,因为前端部分已经使用了VirtualList
虚拟列表只渲染当前可视区域的视图,非可视区域的视图在用户滚动到可视区域再渲染:
但仍不能解决数据加载缓慢问题。原因是数据量本身太大,导致传输的速度过慢,所以渲染到页面上的速度也很慢。
解决方案
用请求分片的方式,先加载前50条数据,监听滑动到底部的事件,当列表下拉到底部的时候,再去请求后50条数据。这么做每次只请求50条数据,传输速度就会很快。
前端具体实现如下:
function PoemList() {
...
// 设置请求偏移量
const [offset, setOffset] = useState<number>(0);
useEffect(() => {
...
// 第一次请求
getPoemList(category, offset)
.then((res) => {
setList(res);
})
.catch((err) => {
console.error(err);
});
}
}, []);
// 监听滑动到底部