import React from "react"; import styles from "./index.less"; import { List, message, Avatar, Spin } from "antd"; import reqwest from "reqwest"; import WindowScroller from "react-virtualized/dist/commonjs/WindowScroller"; import AutoSizer from "react-virtualized/dist/commonjs/AutoSizer"; import VList from "react-virtualized/dist/commonjs/List"; import InfiniteLoader from "react-virtualized/dist/commonjs/InfiniteLoader"; const fakeDataUrl = "https://randomuser.me/api/?results=5&inc=name,gender,email,nat&noinfo"; class VirtualizedExample extends React.Component { state = { data: [], loading: false }; loadedRowsMap = {}; componentDidMount() { this.fetchData(res => { this.setState({ data: res.results }); }); } fetchData = callback => { reqwest({ url: fakeDataUrl, type: "json", method: "get", contentType: "application/json", success: res => { callback(res); } }); }; handleInfiniteOnLoad = ({ startIndex, stopIndex }) => { let { data } = this.state; this.setState({ loading: true }); for (let i = startIndex; i <= stopIndex; i++) { // 1 means loading this.loadedRowsMap[i] = 1; } if (data.length > 19) { message.warning("Virtualized List loaded all"); this.setState({ loading: false }); return; } this.fetchData(res => { data = data.concat(res.results); this.setState({ data, loading: false }); }); }; isRowLoaded = ({ index }) => !!this.loadedRowsMap[index]; renderItem = ({ index, key, style }) => { const { data } = this.state; const item = data[index]; return ( } title={{item.name.last}} description={item.email} />
Content
); }; render() { const { data } = this.state; const vlist = ({ height, isScrolling, onChildScroll, scrollTop, onRowsRendered, width }) => ( ); const autoSize = ({ height, isScrolling, onChildScroll, scrollTop, onRowsRendered }) => ( {({ width }) => vlist({ height, isScrolling, onChildScroll, scrollTop, onRowsRendered, width }) } ); const infiniteLoader = ({ height, isScrolling, onChildScroll, scrollTop }) => ( {({ onRowsRendered }) => autoSize({ height, isScrolling, onChildScroll, scrollTop, onRowsRendered }) } ); return ( {data.length > 0 && {infiniteLoader}} {this.state.loading && } ); } } export default () => (
);