zoukankan      html  css  js  c++  java
  • React Ant Design Mobile ListView 上拉刷新,下拉加载

    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={{  '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;
            }
        }
    }

     

  • 相关阅读:
    PHP调试总结
    vim常用命令
    Xshell
    JavaScript
    HTML+CSS
    解决VMware“该虚拟机似乎正在使用中”问题
    MVC dirname(——FILE——)
    各种编程语言中的指针和引用
    Go defer 原理和源码剖析
    软件架构定义的流派
  • 原文地址:https://www.cnblogs.com/tlfe/p/14742248.html
Copyright © 2011-2022 走看看