react实现触底加载

触底加载

使用ant-mobile组件

npm i antd-mobile

yarn i antd-mobile

后端接口

router.get('/home', async (req, res, next) => {
  // 接受长度的len
  let len = req.query.len
  const data = await homeModel.find().limit(len) //限制的条数
  let lens = (await homeModel.find()).length     //总条数
  if (lens > len) {    //条数在限定范围内
    res.send({ code: 200, data, hasMore: true })   //hasMore判断是否有数据
  } else {
    res.send({ code: 200, data, hasMore: false })
  }

});

前段react框架

import React, { useEffect, useState } from 'react'
import '../assets/css/index.scss'
import axios from '../utils/index'
import { InfiniteScroll } from 'antd-mobile'
import { sleep } from 'antd-mobile/es/utils/sleep'
export default function Index() {
    const [list, setList] = useState([])    //获取数据
    const [len, setlen] = useState(3)       //条数
    const [hasMore, sethasMore] = useState(true) //状态



    const getHome = async () => {
        //传递条数
        const { data } = await axios.get(`home?len=${len}`)

        if (data.hasMore) {
            setlen(len + 2)
        }
        sethasMore(data.hasMore)
        setList(data.data)
    }

    const loadMore = async () => {
        await sleep(2000)
        getHome()
    }
    useEffect(() => {
        getHome()

    }, [])

    return (
        <div>

            <ul>
                {list.map(item =>
                    <li key={item._id}>
                        <img src={require('../assets/images/' + `${item.img}`)} alt="" style={{ width: "160px" }} />
                        <p>{item.name}</p>
                    </li>
                )}
            </ul>

            <InfiniteScroll loadMore={loadMore} hasMore={hasMore}></InfiniteScroll>
        </div>

    )
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值