react18虚拟滚动列表

这篇具有很好参考价值的文章主要介绍了react18虚拟滚动列表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

不依赖第三方,借用react18api和原生JS实现一个虚拟滚动列表,如果你的项目比较小,又不想引入第三方的框架,可以拿去用;
react18虚拟滚动列表,vite4+react18+ts+antd5,前端,reactjs文章来源地址https://www.toymoban.com/news/detail-826870.html

style样式
    .record_list{
        // 这里是动态高度
        height: calc(100% - 116px);
        overflow-x: hidden;
        overflow-y: auto;
        position: relative;
        .render_box{
            // 布局设为绝对定位,后续使用translateY动态改变
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
        }
    }
核心HTML
     {/* 外层盒子 屏幕高度 可滚动*/}
    <div className={style.record_list} ref={scrollBoxRef} onScroll={virtualBoxScroll}>
        {/* 空盒子 撑起高度*/}
        <div style={{ height: `${recordList.length * renderItemHeight}px` }}></div>
        {/*实际渲染的列表记录*/}
        <div className={style.render_box}  
            style={{ transform: `translateY(${startIndex * renderItemHeight}px)` }}>
            {
                 renderList.map((item: any) => {
                    return <CallLogCard key={item.id} item={item}></CallLogCard>
                })
            }
        </div>
    </div>
逻辑代码
    /*****************初始化变量*****************/
    // 1.初始配置
    let expendCount = 4; // 多渲染数量
    let screenHeight = 700; // 渲染屏幕高度
    const renderItemHeight = 60; // 每条数据的固定高度

    // 2.滚动容器Ref
    const scrollBoxRef = useRef<any>(null);

    // 3.开始,结束渲染索引
    const [endIndex, setEndIndex] = useState(20);
    const [startIndex, setStartIndex] = useState(0);

    // 4.动态更新渲染列表
    const renderList = useMemo(
        () => recordList.slice(startIndex, endIndex),
        [startIndex, endIndex, recordList],
    );

    /*****************方法*****************/
    // 滚动监听
    const virtualBoxScroll = () => {
        // 滑动距离
        const scrollDistance = scrollBoxRef.current.scrollTop;
        // 计算新索引
        /*Math.floor()一个数向下取整*/
        const startIndex = Math.floor(scrollDistance / renderItemHeight);
        /*Math.ceil()一个数向上取整*/
        const endIndex =
        startIndex + Math.ceil(screenHeight / renderItemHeight) + expendCount; // 多渲染5条
        // 更新索引
        setStartIndex(startIndex);
        setEndIndex(endIndex);
    };
    // 历史记录列表
    const [recordList, setRecordList] = useState<any>([]);
    // 获取历史记录列表;
    const pullHistoryPage = () => {
        /*ajax*/
        setRecordList([...res.list]);
    };
    // 初始化滚动屏幕高度
    const handleInitScreenHeight = () => {
        screenHeight = scrollBoxRef.current.clientHeight;
        /*Math.ceil()一个数向上取整*/
        expendCount = Math.ceil(screenHeight / renderItemHeight);
    };
    useEffect(() => {
         // 拉取数据
         pullHistoryPage();
        // 初始化定位
        handleInitScreenHeight();
    }, []);

到了这里,关于react18虚拟滚动列表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 超级详细 最新 vite4+vue3+ts+element-plus+eslint-prettier 项目搭建流程

    系列文章目录 【element-plus】 table表格每行圆角解决方案 element也通用 【Vue3+Vite+Ts+element-plus】使用tsx实现左侧栏菜单无限层级封装 超级详细GitBook和GitLab集成步骤【linux环境】 1.1、项目创建 执行以下代码将vite将会自动生成初始的 vite4+vue3+ts的项目模板,pnpm、npm、yarn 选择一种执

    2024年02月04日
    浏览(77)
  • antd5源码调试环境启动(MacOS)

    这里antd5 版本是5.8.3 前提:安装python3、node版本18.14.0(这是本人当前下载的版本) python3安装教程可参考:https://blog.csdn.net/weixin_40119412/article/details/132368672?spm=1001.2014.3001.5501 发现会提示错误 根据提示执行安装shape 重新安装依赖 启动项目

    2024年02月12日
    浏览(31)
  • react-vite-antd环境下新建项目

    使用 NPM: 使用 Yarn: 使用 PNPM: 1. 我使用的 yarn安装,基本配置项目名字, 框架react ,js 2. cd vite-react进入项目目录安装node包并启动项目 加载之后使用启动命令 yarn run dev 使用 npm: 使用 yarn: 安装完成: 1. 清空App.css和index.css文件中内容 2. 修改App.jsx中内容 3. 页面显示: 1. 代码 报错

    2024年02月12日
    浏览(33)
  • antd List 滚动加载(InfiniteScroll ) react-infinite-scroll-component 重置滚动条

    问题 :在页面滚动的时候,infiniteScroll 页面数是自动+1。举个例子,页面加载到第三页,infiniteScroll 无法在重新开始计数,而在某些场景中需要重新开始计数,比如切换月份等(按照需求),page number 需要重新计数。(切换后会自动滚动到上一次滚动位置,自动调用接口)

    2024年02月22日
    浏览(38)
  • 【Vue3+Ts+Vite】配置滚动条样式

    2024年02月15日
    浏览(46)
  • 配置Vite+React+TS项目

    执行 npm create vite 并填写项目名、用那个框架。。 路径别名 在 vite.config.ts 里面配置: 如果开发环境是ts,会提示如找不到path或找不到__dirname等,需要先安装一下node的类型声明文件: npm i -D @types/node 然后去修改根目录的 tsconfig.json 文件,不然你使用路径别名引入组件的时候会

    2024年02月21日
    浏览(45)
  • React18.x + i18next + antd 国际化正确使用姿势及避坑指南

    如果你使用这个教程还不能够解决你的问题的话,直接私信我,免费一对一给你解决。 具体的创建方法大家参考vite官方文档,大概的操作如下,如果需要更详细的,大家去自行搜索即可 因为我这里使用的是ts版本,所以,你自己看着办吧。 其中 i18next-browser-languagedetector i1

    2024年02月05日
    浏览(62)
  • react17+antd4.18 动态实现面包屑导航Breadcrumb-----需改善

    1、已经定义好的全部的路由配置,需要是这种格式的,可以再加上关于icon的内容. 2、代码 3、在组件中使用的时候需要传入当前页面的路劲发作为Bread组件的属性。 4、假设当前页面的路径为 ‘/page1/page102/page10201’,经过上述操作筛选后得到的对应路径上的路由配置routes的值

    2024年04月25日
    浏览(31)
  • vite+react+ts+eslint+prettier构建react开发项目

    目录 一、构建项目 二、安装eslint和prettier的依赖 三、修改.eslintrc.cjs,创建.prettierrc.cjs 1、.eslintrc.cjs文件配置 2、ESlint忽略文件.eslintignore 3、.prettierrc.cjs文件配置  4、prettierrc忽略配置文件.prettierignore

    2024年02月11日
    浏览(45)
  • 使用React18+Ts创建项目

    首先,使用create-react-app工具创建一个新的React项目: 使用脚手架创建项目后,自带react-dom等依赖项,但react中的所用的路由方法是react-router-dom中。 默认情况下,create-react-app模板会自动生成一些文件和文件夹,这些文件和文件夹包括: node_modules:存储所有的项目依赖项。 p

    2024年02月09日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包