react实现触底加载

用到了 antd-mobile第三方库中的InfiniteScroll 无限滚动

安装第三方库:

yarn add antd-mobile
npm i antd-mobile

后端接口,使用的node koa2框架:

var express = require('express');
var router = express.Router();
const { chudiModel } = require('../db/model')

/* GET home page. */
router.get('/list', async (req, res) => {
  let len = req.query.len //接收数组的长度
  data = await chudiModel.find().limit(len) //使用limit进行截取
  let lens = (await chudiModel.find()).length  //所有数据的条数
  if (lens > len) { //如果所有数据条数大于想要的数据条数  说明还可以进行加载数据
    res.send({
      msg: "成功",
      data,
      hasMore: true, //为true的时候说明还可以在加载数据
    })
  } else {
    res.send({
      msg: "成功",
      data,
      hasMore: false
    })
  }

});

module.exports = router;


 

前端react框架

import { useEffect, useState } from 'react';
import './index.css';
import axios from 'axios';
import { InfiniteScroll } from 'antd-mobile';
import { sleep } from 'antd-mobile/es/utils/sleep'


export default function IndexPage() {
  const [data, setdata] = useState([]) //数据
  const [len, setlen] = useState(8) //数据条数
  const [hasMore, setHasMore] = useState(false)

  const getdata = async () => {
    let data = await axios.get('http://localhost:3000/list?len=' + len)

    setHasMore(data.data.hasMore)
    setdata(data.data.data)
    if (data.data.hasMore == true) {
      setlen(len + 5)
    }
  }
  async function loadMore() {
    await sleep(2000) //等待两秒
    getdata() //请求数据
  }

  useEffect(() => {
    getdata() //初始化数据
  }, [])

  return (
    <div>
      <div className='top'>
        <ul>
          <li>鞋子</li>
          <li>衣服</li>
          <li>家具用品</li>
          <li>电器</li>
          <li>电饭煲</li>
          <li>更多</li>
        </ul>
      </div>
      <div className='content'>
        {
          data.map(item => (
            <div className='box' key={item._id}>
              <img src='./1.png' alt="" className='img' />
              <div className='zi'>{item.title}</div>
            </div>
          ))
        }
        <InfiniteScroll loadMore={loadMore} hasMore={hasMore} />
      </div>
    </div>
  );
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
函数式组件也可以实现根据监听滚动条来显示隐藏按钮的功能。相较于类组件,函数式组件的实现方式有些不同。具体实现步骤如下: 1. 使用`useState` hook来定义`showButton`状态和更新`showButton`状态的函数。 2. 使用`useEffect` hook来注册和注销滚动事件监听。 3. 在监听回调函数中,获取当前滚动条的位置,判断是否需要显示按钮,并调用`setShowButton`函数来更新`showButton`状态。 示例代码如下: ```jsx import React, { useState, useEffect } from 'react'; function ScrollButton() { const [showButton, setShowButton] = useState(false); useEffect(() => { const handleScroll = () => { const scrollTop = document.documentElement.scrollTop || document.body.scrollTop; if (scrollTop > 100 && !showButton) { setShowButton(true); } else if (scrollTop <= 100 && showButton) { setShowButton(false); } }; window.addEventListener('scroll', handleScroll); return () => { window.removeEventListener('scroll', handleScroll); }; }, [showButton]); const handleClick = () => { window.scrollTo({ top: 0, behavior: 'smooth' }); }; return ( <div> {showButton && <button onClick={handleClick}>回到顶部</button>} </div> ); } export default ScrollButton; ``` 在上面的代码中,当滚动条滚动距离大于100时,显示按钮;当滚动条滚动距离小于等于100时,隐藏按钮。你可以根据实际需求来调整这个值。在点击按钮时,使用`window.scrollTo`方法来回到页面顶部。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值