react ts实现一个 无限加载组件

页面滑动到底部,直接加载下一页数据

  • InfiniteScroll.tsx

    /**

    • 无限 加载组件
      */

    import { FC, createRef, useEffect, CSSProperties } from 'react'
    import LoadingText from '../LoadingText'

    type PropsType = {
    loadMore: () => void
    hasMore: boolean
    }

    const InfiniteScroll: FC<PropsType> = (props: PropsType) => {
    const { loadMore, hasMore } = props
    // const [loading, setLoading] = useState(hasMore)
    const ref = createRef<HTMLDivElement>()
    // console.log('InfiniteScroll', hasMore)

    复制代码
    useEffect(() => {
      const observer = new IntersectionObserver((entries, observer) => {
        entries.forEach((entry) => {
          if (entry.isIntersecting) {
            // setLoading(false)
            loadMore()
          }
        })
      })
      // console.log('ref.current', ref.current)
    
      if (ref.current) {
        observer.observe(ref.current)
      }
    }, [])
    
    const defaultStyle: CSSProperties = {
      padding: '0 0 0.6rem 0'
    }
    
    return (
      <div className="scroll-load-more" ref={ref}>
        {hasMore ? (
          <LoadingText defaultStyle={defaultStyle} />
        ) : (
          <LoadingText>
            <div
              style={{
                ...defaultStyle,
                textAlign: 'center',
                fontSize: '0.28rem',
                color: '#999'
              }}
            >
              --- 我是有底线的 ---
            </div>
          </LoadingText>
        )}
      </div>
    )

    }

    export default InfiniteScroll

  • 用法

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

    复制代码
    async function loadMore() {
      // 加载下一页数据
    }

    // hasMore 是 判断是否还有数据状态

相关推荐
李姆斯14 小时前
技术方案评审没人听?别人抓不住重点?你不妨这样做!
前端·后端·面试
CodeCaptain15 小时前
Cocos Creator 3.8.x 可对tiled 1.4.x进行的操作或分析有哪些
经验分享·游戏·typescript·cocos2d
程序员码歌15 小时前
短思考第269天,想清楚这些,短文写作,人人都可以
android·前端·ai编程
C_心欲无痕15 小时前
网路相关 - 本地开发为什么需要端口号
前端·网络·网络协议
Codebee15 小时前
ooder-A2UI 框架中的矢量图形全面指南
前端·人工智能
徐小夕15 小时前
jitword协同AI文档SDK已开源!轻松接入任何后端!
前端·vue.js·github
C_心欲无痕16 小时前
网络相关 - CDN内容分发加速原理
前端·网络
hxjhnct16 小时前
如何实现直播零延迟播放
前端·javascript
明远湖之鱼16 小时前
从代码到像素:浏览器渲染原理与 React Fiber 架构的深度协作
前端·react.js·浏览器
Knight_AL16 小时前
Spring Cloud Alibaba 项目中DataSource 配置失败?原来是 application.yml 和 bootstrap.yml 的坑
前端·bootstrap·html