UNPKG

cjd-parkball

Version:

> 中后台业务组件库,中后台就像公园,进入需要买门票(登录),所以以 Parkball(公园球) 命名,公园内必定捕获!作为一个组件库,提供使用方法文档,方便开发者的调用

125 lines (110 loc) 2.84 kB
--- category: 2 title: 滚动加载 title_en: Scrolling loaded --- zh-CN 结合 [react-infinite-scroller](https://github.com/CassetteRocks/react-infinite-scroller) 实现滚动自动加载列表。 en-US The example of infinite load with [react-infinite-scroller](https://github.com/CassetteRocks/react-infinite-scroller). ````jsx import { List, message, Avatar, Spin } from 'parkball'; import reqwest from 'reqwest'; import InfiniteScroll from 'react-infinite-scroller'; const fakeDataUrl = 'https://randomuser.me/api/?results=5&inc=name,gender,email,nat&noinfo'; class InfiniteListExample extends React.Component { state = { data: [], loading: false, hasMore: true, } getData = (callback) => { reqwest({ url: fakeDataUrl, type: 'json', method: 'get', contentType: 'application/json', success: (res) => { callback(res); }, }); } componentDidMount() { this.getData((res) => { this.setState({ data: res.results, }); }); } handleInfiniteOnLoad = () => { let data = this.state.data; this.setState({ loading: true, }); if (data.length > 14) { message.warning('Infinite List loaded all'); this.setState({ hasMore: false, loading: false, }); return; } this.getData((res) => { data = data.concat(res.results); this.setState({ data, loading: false, }); }); } render() { return ( <div className="demo-infinite-container"> <InfiniteScroll initialLoad={false} pageStart={0} loadMore={this.handleInfiniteOnLoad} hasMore={!this.state.loading && this.state.hasMore} useWindow={false} > <List dataSource={this.state.data} renderItem={item => ( <List.Item key={item.id}> <List.Item.Meta avatar={<Avatar src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" />} title={<a href="https://ant.design">{item.name.last}</a>} description={item.email} /> <div>Content</div> </List.Item> )} > {this.state.loading && this.state.hasMore && ( <div className="demo-loading-container"> <Spin /> </div> )} </List> </InfiniteScroll> </div> ); } } ReactDOM.render(<InfiniteListExample />, mountNode); ```` ````css .demo-infinite-container { border: 2px solid #e8e8e8; border-radius: 4px; overflow: auto; padding: 8px 24px; height: 300px; } .demo-loading-container { position: absolute; bottom: 40px; width: 100%; text-align: center; } ````