import React, { useEffect, useState } from 'react'; import { Avatar, Button, List, Skeleton } from 'antd'; interface DataType { gender?: string; name?: string; email?: string; avatar?: string; loading: boolean; } const PAGE_SIZE = 3; const App: React.FC = () => { const [initLoading, setInitLoading] = useState(true); const [loading, setLoading] = useState(false); const [data, setData] = useState([]); const [list, setList] = useState([]); const [page, setPage] = useState(1); const fetchData = (currentPage: number) => { const fakeDataUrl = `https://660d2bd96ddfa2943b33731c.mockapi.io/api/users?page=${currentPage}&limit=${PAGE_SIZE}`; return fetch(fakeDataUrl).then((res) => res.json()); }; useEffect(() => { fetchData(page).then((res) => { const results = Array.isArray(res) ? res : []; setInitLoading(false); setData(results); setList(results); }); }, []); const onLoadMore = () => { setLoading(true); setList(data.concat(Array.from({ length: PAGE_SIZE }).map(() => ({ loading: true })))); const nextPage = page + 1; setPage(nextPage); fetchData(nextPage).then((res) => { const results = Array.isArray(res) ? res : []; const newData = data.concat(results); setData(newData); setList(newData); setLoading(false); // Resetting window's offsetTop so as to display react-virtualized demo underfloor. // In real scene, you can using public method of react-virtualized: // https://stackoverflow.com/questions/46700726/how-to-use-public-method-updateposition-of-react-virtualized window.dispatchEvent(new Event('resize')); }); }; const loadMore = !initLoading && !loading ? (
) : null; return ( ( edit, more]} > } title={{item.name}} description="Ant Design, a design language for background applications, is refined by Ant UED Team" />
content
)} /> ); }; export default App;