React实现虚拟列表的优秀库介绍

在 React 中,有一些优秀的库可以帮助你实现高效的虚拟列表渲染。以下是几个常用的库:

1. react-window

react-window 是一个轻量级的虚拟列表库,适用于大多数虚拟列表需求。它提供了简单易用的 API 和良好的性能。

安装

npm install react-window

示例代码

import React, { useCallback } from 'react';
import { FixedSizeList as List } from 'react-window';

const generateUniqueKey = () => `${new Date().getTime()}-${Math.random().toString(36).substr(2, 9)}`;

const DATA_LIST = Array.from({ length: 100000 }, (_, index) => ({
  key: generateUniqueKey(),
  slogan: `Item ${index + 1}`,
  bgColor: `hsl(${Math.random() * 360}, 100%, 75%)`
}));

const ITEM_HEIGHT = 35;

const Row = ({ index, style }) => (
  <div style={{ ...style, backgroundColor: DATA_LIST[index].bgColor }}>
    {DATA_LIST[index].slogan}
  </div>
);

const VirtualListPage = () => (
  <List
    height={window.innerHeight}
    itemCount={DATA_LIST.length}
    itemSize={ITEM_HEIGHT}
    width={'100%'}
  >
    {Row}
  </List>
);

export default VirtualListPage;

2. react-virtualized

react-virtualized 是一个功能强大的虚拟列表库,提供了更多的功能和配置选项,适用于复杂的虚拟列表需求。

安装

npm install react-virtualized

示例代码

import React from 'react';
import { List } from 'react-virtualized';

const generateUniqueKey = () => `${new Date().getTime()}-${Math.random().toString(36).substr(2, 9)}`;

const DATA_LIST = Array.from({ length: 100000 }, (_, index) => ({
  key: generateUniqueKey(),
  slogan: `Item ${index + 1}`,
  bgColor: `hsl(${Math.random() * 360}, 100%, 75%)`
}));

const ITEM_HEIGHT = 35;

const rowRenderer = ({ key, index, style }) => (
  <div key={key} style={{ ...style, backgroundColor: DATA_LIST[index].bgColor }}>
    {DATA_LIST[index].slogan}
  </div>
);

const VirtualListPage = () => (
  <List
    width={window.innerWidth}
    height={window.innerHeight}
    rowCount={DATA_LIST.length}
    rowHeight={ITEM_HEIGHT}
    rowRenderer={rowRenderer}
  />
);

export default VirtualListPage;

3. react-virtual

react-virtual 是一个现代的虚拟列表库,提供了简单的 API 和良好的性能。

安装

npm install @tanstack/react-virtual

示例代码

import React from 'react';
import { useVirtual } from '@tanstack/react-virtual';

const generateUniqueKey = () => `${new Date().getTime()}-${Math.random().toString(36).substr(2, 9)}`;

const DATA_LIST = Array.from({ length: 100000 }, (_, index) => ({
  key: generateUniqueKey(),
  slogan: `Item ${index + 1}`,
  bgColor: `hsl(${Math.random() * 360}, 100%, 75%)`
}));

const ITEM_HEIGHT = 35;

const VirtualListPage = () => {
  const parentRef = React.useRef();

  const rowVirtualizer = useVirtual({
    size: DATA_LIST.length,
    parentRef,
    estimateSize: React.useCallback(() => ITEM_HEIGHT, []),
  });

  return (
    <div
      ref={parentRef}
      style={{
        height: '100vh',
        width: '100%',
        overflow: 'auto',
      }}
    >
      <div
        style={{
          height: `${rowVirtualizer.totalSize}px`,
          width: '100%',
          position: 'relative',
        }}
      >
        {rowVirtualizer.virtualItems.map(virtualRow => (
          <div
            key={virtualRow.index}
            ref={virtualRow.measureRef}
            style={{
              position: 'absolute',
              top: 0,
              left: 0,
              width: '100%',
              height: `${ITEM_HEIGHT}px`,
              transform: `translateY(${virtualRow.start}px)`,
              backgroundColor: DATA_LIST[virtualRow.index].bgColor,
            }}
          >
            {DATA_LIST[virtualRow.index].slogan}
          </div>
        ))}
      </div>
    </div>
  );
};

export default VirtualListPage;

4. antd 库:优秀的 React 库,这里不多介绍,详情看官网。

总结

  • react-window:轻量级,适用于大多数虚拟列表需求。
  • react-virtualized:功能强大,适用于复杂的虚拟列表需求。
  • react-virtual:现代化,提供简单的 API 和良好的性能。
  • antd 库:优秀的 React 库,不多介绍。

根据你的具体需求选择合适的库,可以大大简化虚拟列表的实现,并提高性能。

React是一个用于构建用户界面的JavaScript。它被广泛应用于Web应用程序开发中,特别适用于创建大型和复杂的应用程序。React的核心思想是组件化,将UI分解成独立可复用的组件,通过组件的组合和嵌套来构建整个应用程序。 React采用一种称为虚拟DOM(Virtual DOM)的机制来提高性能。虚拟DOM是一个轻量级的JavaScript对象树,它可以代表真实的DOM结构。当组件的状态发生变化时,React会通过比较新旧虚拟DOM树的差异并更新只有真正需要改变的部分,避免了无必要的DOM操作,从而提高了性能。此外,React还通过使用合适的Diff算法来进行快速而高效的虚拟DOM更新。 React具有强大而灵活的生命周期方法,可以在组件的不同阶段进行逻辑处理和与外部数据交互。通过这些生命周期方法,开发者可以精确地控制组件的渲染和更新行为,实现更好的性能和用户体验。 此外,React还支持一种称为JSX的语法扩展。JSX允许开发者在JavaScript代码中直接编写类似HTML的标记,使得页面结构和组件的关系更加清晰和易于理解。 React作为一个开源项目,有着庞大的社区支持和活跃的生态系统。许多优秀的第三方和工具如Redux、React Router等都与React紧密集成,帮助开发者更加高效地构建复杂的应用程序。 总之,React是一个非常强大和灵活的前端开发,它提供了快速、高效和可维护的方式来构建用户界面。无论是开发单页应用、移动应用还是响应式Web应用,React都是一个理想的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值