react实现触底刷新,接口一次性返回1000条数据类似

后端接口一次性返回1000条数据,展示在前端,目前只想到用滚动条做,如果大佬有更优的解决办法,还请赐教。

初始化设置:

 constructor(props){
        super(props);
        this.state={
            scorollLoading: false,//发送接口加载中标识
            showSize:6,//每次加载几条
            currentSize: 0,//当前加载的位置
            dataList:[
                {name:'1',age:1},
                { name: '2', age: 3 },
                { name: '3', age: 3 },
                { name: '4', age: 4 },
                { name: '5', age: 5 },
                { name: '6', age: 6 },
                { name: '7', age: 7 },
                { name: '8', age: 8 },
                { name: '9', age:9 },
                { name: '10', age: 10 },
                { name: '11', age: 11 },
                { name: '12', age: 12 },
                { name: '13', age: 13 },
                { name: '14', age: 14 },
                { name: '15', age: 15 },
                { name: '16', age: 16 },
                { name: '17', age: 17 },
                { name: '18', age: 18 },
                { name: '19', age: 19 },

            ],//模拟多条数据
            displayList: [],//展示的list
            flag: false,//加载完成
        }
    }

在页面挂载后,添加滚动事件,

componentDidMount(){
        this.getData(this.state.dataList, this.state.showSize);
        window.addEventListener("scroll", this.flashData)
        
}
flashData=()=>{
        // 网页滚动高度 
        var scrollTopHeight = document.body.scrollTop || document.documentElement.scrollTop
        // 文档显示区域的高度
        var showHeight = window.innerHeight
        // 所有内容的高度
        var allHeight = document.body.scrollHeight
        // 只需要判断内容盒子的高度+滚动条的scrollTop = 盒子内容的高度即为触底
        // if (allHeight < scrollTopHeight + showHeight) {
        if (allHeight < scrollTopHeight + showHeight) {
            console.log("触底了:", )
            this.getData(this.state.dataList, this.state.showSize);
        }
}

滚动事件中需要触发每次更新后的数据

getData(listData = [], size = 0) {
        if (this.state.currentSize === listData.length - 1){
            this.setState({
                flag:true
            })
            return;
        }
        let tempList = [];
        for (let i = this.state.currentSize; i < listData.length; i++) {
            if (i >= this.state.currentSize + size) {
                break;
            }
            tempList.push(listData[i]);
        }
        this.setState({
            currentSize: this.state.currentSize+size,
            displayList: [...this.state.displayList, ...tempList],
            flag: this.state.currentSize === listData.length-1?true:false
            // flag:true
        })
    }

                                                                                                                                 在此鸣谢 狗蛋                                     

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值