首页 > 其他 > 详细

Ant Design Mobile ListView 上拉刷新,下拉加载

时间:2021-05-07 23:56:13      阅读:28      评论:0      收藏:0      [点我收藏+]
import React from react
import ./earnings.scss
import { ListView, PullToRefresh } from antd-mobile;
export default class Earnings extends React.Component {
    constructor(props) {
        super(props)
        const dataSource = new ListView.DataSource({
            rowHasChanged: (r1, r2) => r1 !== r2
        });
        this.state = {
            dataSource,
            firstArr:[苹果,栗子,橘子,桃子,葡萄,苹果1,栗子2,橘子3,桃子4,葡萄5,苹果6,栗子7,橘子8,桃子9,葡萄0],
            firstArr1:[苹果s,栗子ss,橘子ssss,桃子sss,葡萄sss,苹果1sss,栗子2sss,橘子3ss,桃子4ss,葡萄ss5],
            refreshing: false, //上拉刷新
            isLoading: true, //数据是否加载完毕
            num:0
        }
    }
    componentDidMount(){
        this.setState({
            dataSource: this.state.dataSource.cloneWithRows({...this.state.firstArr})
        })
    }
    //下拉刷新
    onRefresh = () => {
        this.setState({ refreshing: true })
        //接口请求第一页数据,完成后将refreshing设为false
        setTimeout(()=>{
            this.setState({
                refreshing: false
            })
        },2000)
    }
    // 滑动到底部时加载更多
    onEndReached = (event) => {
        // 显示加载loading....
        this.setState({
            isLoading: false 
        })
        
        // 当this.state.num 》 1时,规定为数据加载完毕
        if(this.state.num > 1){
            this.setState({
                isLoading : true
            })
            return false
        }

        // 等待2s后再原始数据上追加数据
        setTimeout(() => {
            this.setState({
                firstArr: [...this.state.firstArr,...this.state.firstArr1]
            },()=>{
                // 数据发生改变是要使用cloneWithRows通知
                this.setState({
                    num: this.state.num += 1,
                    dataSource: this.state.dataSource.cloneWithRows({...this.state.firstArr}),
                })
                console.log(this.state)
            })
        },2000)
    }
    render() {
        const row = (rowData, sectionID, rowID) => {
            // 这里rowData,就是上面方法cloneWithRows的数组遍历的单条数据了,直接用就行
            // console.log(‘rowData‘, rowData);
            // console.log(‘sectionID‘, sectionID);
            // console.log(‘rowID‘, rowID);
            return (
                <div className="earnings">
                    <div className="content">
                        <span className="date box">{rowData}</span>
                        <span className="money box">0.30元</span>
                    </div>
                </div>
            )
        }
        return (
            <div className="earnings-list">
                <ListView
                    dataSource={this.state.dataSource}
                    renderRow={row}
                    initialListSize={15}
                    pageSize={10}
                    onEndReached={this.onEndReached}
                    onEndReachedThreshold={10}
                    useBodyScroll={false}
                    renderHeader={() => 
                        (
                            <div className="earnings-title">
                                <span>日期</span>
                                <span>好友贡献奖励</span>
                            </div>
                        )
                    }
                    renderFooter={() => (<div style={{ padding: 30, textAlign: center }}>
                        { !this.state.isLoading ? ‘加载中.... : ‘我是有底线的‘}
                    </div>)}
                    style={{ width: 100vw, height: 100vh }}
                    pullToRefresh={<PullToRefresh // import { PullToRefresh } from ‘antd-mobile‘
                        refreshing={this.state.refreshing}
                        onRefresh={this.onRefresh}
                    />}
                />
            </div>
        )
    }
}

 

.earnings-list{
    background: #ffffff;
    .earnings{
        h1{
            margin: 0;
        }
        padding: .2rem;
        .content{
            display: flex;
            align-items: center;
            justify-content: space-between;
            border-bottom: 1px solid #EEEEEE;
            line-height: .8rem;
            padding: 0 .4rem;
            .box{
                font-size: .28rem;
            }
            .date{
                color: #333333;
            }
            .money{
                color: #FF7841;
            }
        }
    }
    .am-list-header{
        background: #ffffff;
    }
    .am-list-body::after{
        background-color: #ffffff !important;
    }
    .am-list-body::before{
        background-color: #ffffff !important;
    }
    .earnings-title{
        display: flex;
        align-items: center;
        justify-content: space-between;
        border-bottom: 1px solid #EEEEEE;
        line-height: .8rem;
        padding: 0 .2rem;
        span{
            color: #999999;
            font-size: .24rem;
        }
    }
}

 技术分享图片

 

Ant Design Mobile ListView 上拉刷新,下拉加载

原文:https://www.cnblogs.com/tlfe/p/14742248.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!