在 React 中渲染大型数据集的 3 种方法

您所在的位置:网站首页 react中渲染列表方法 在 React 中渲染大型数据集的 3 种方法

在 React 中渲染大型数据集的 3 种方法

2024-07-12 12:05:25| 来源: 网络整理| 查看: 265

随着 Web 应用程序变得越来越复杂,我们需要找到有效的方法来优化性能和渲染大型数据集。在 React 应用程序中处理大型数据集时,一次呈现所有数据可能会导致性能不佳和加载时间变慢。

虚拟化是一种通过一次仅呈现数据集的一部分来解决此问题的技术,从而为用户提供更快、更流畅的体验。在本文中,我们将探讨和比较可用于 React 的各种虚拟化列表库的优缺点,包括:

React Virtuoso

React Window

react-infinite-scroller

React Virtuoso

React Virtuoso 是 React 的虚拟化列表库,可以快速高效地渲染大型数据集。它是高度可定制的,我们可以使用它来渲染简单和复杂的数据结构。

React Virtuoso 使用窗口技术,仅渲染屏幕上可见的元素,从而缩短加载时间和提高性能。

下面介绍如何通过两个步骤在您的应用程序中使用 React Virtuoso:

首先,安装 Virtuoso 库:

npm install react-virtuoso

接下来,在应用程序中使用该组件:

import * as React from 'react' import * as ReactDOM from 'react-dom' import { Virtuoso } from 'react-virtuoso' const App = () => (   {          background: index % 2 === 0 ? '#ffbb00' : '#ffcc33',         color: '#333',         padding: '10px',         fontSize: '16px',         fontFamily: 'Arial, sans-serif',         border: '1px solid #ccc',         borderRadius: '4px',         margin: '5px 0'       }}>         Item {index}            )}   /> ) export default App; ReactDOM.render(, document.getElementById('root'))

在上面的代码中,我们从 react-virtuoso 库中导入 Virtuoso 组件。

接下来,我们定义一个名为 返回 App 组件的功能 Virtuoso 组件。

该 Virtuoso 组件包含多个道具:

style :设置组件的样式,包括其高度和背景颜色

totalCount :设置列表中的项目总数;在这种情况下,10,000

itemContent :接收一个 index 参数并返回用于在该索引处呈现项目的 JSX 代码

在这种情况下,该函数呈现一个 div 包含文本“Item”的元素,后跟索引号。该 prop 根据 style 索引是奇数还是偶数来设置 div 元素的背景颜色、字体大小、字体系列、边框、边框半径和边距。

下面是我们代码的结果:

图片

我们也可以将图像添加到列表中:

import * as React from 'react'; import * as ReactDOM from 'react-dom'; import { Virtuoso } from 'react-virtuoso'; const App = () => {   const [images, setImages] = React.useState([]);   // Fetch random images from Unsplash on component mount   React.useEffect(() => {     const fetchImages = async () => {       const response = await fetch(         'https://api.unsplash.com/photos/random?count=100',         {           headers: {             Authorization: 'Client-ID ',           },         }       );       const data = await response.json();       const urls = data.map(item => item.urls.thumb);       setImages(urls);     };     fetchImages();   }, []);   return (     {            background: index % 2 === 0 ? '#ffbb00' : '#ffcc33',           color: '#333',           padding: '10px',           fontSize: '16px',           fontFamily: 'Arial, sans-serif',           border: '1px solid #ccc',           borderRadius: '4px',           margin: '5px 0',           display: 'flex',           alignItems: 'center'         }}>           { listStyle: "none", margin: "0", padding: "0" }}>         {users.map((user, index) => (                        {user.name}             {user.email}             {user.phone}                    ))}               ); } export default UserList;

图片

让我们分解一下。在组件中 UserList ,我们使用 useState Hook 来管理 users 数组的状态。该loadMore函数生成 20 个新用户并将其追加到现有 users 数组中。

装载组件时,将呈现 InfiniteScroll 组件。 pageStart prop 指示将从何处加载数据的页码。

loadMore prop 是一个回调函数,当用户滚动到列表末尾时调用。它接收页码作为参数,可用于从服务器加载数据。在我们的例子中,我们使用Faker库生成虚假数据。

hasMore prop 指示是否有更多数据要加载。在我们的例子中,我们希望将其设置为 true ,因为我们想无限期地加载更多数据。 loader prop 是一个 React 元素,在加载数据时呈现。我们添加了一个简单的加载器,用于显示加载消息。

最后,我们使用该方法map呈现用户列表。每个用户都呈现在一个 li 元素中,并显示每个用户的姓名、电子邮件和电话号码。

对于样式,我们使用 JavaScript 对象定义几种样式,并使用 style 属性将它们应用于相应的元素。该 rowStyle 对象应用浅灰色背景色,具有深灰色边框和白色文本颜色,而 nameStyle 、 emailStyle 和对象分别为姓名、电子邮件和电话号码字段定义不同的文本颜色和 phoneStyle 样式。

使用 react-infinite-scroller 的优点

改进的性能:使用反应无限滚动器的主要优点是其改进的性能。通过仅渲染数据的可见部分,它减少了 DOM 节点的数量,从而提高了渲染速度

减少内存消耗:由于仅呈现数据的可见部分,因此显着减少了内存消耗

无限滚动:库提供开箱即用的无限滚动,这意味着数据可以动态加载,无需页面刷新或手动加载

易于使用:React-infinite-scroller 易于使用,并与 React 应用程序无缝集成

使用 react-infinite-scroller 缺点

复杂的实现:实现无限滚动可能很复杂,特别是对于初学者。您需要确保以高性能方式加载数据,同时跟踪组件的状态

动态高度问题:反应无限滚动器不能解决动态高度问题。如果列表中的项目具有不同的高度,则库无法准确计算整个列表的高度,从而导致滚动位置不正确

功能集比较表 功能/工具React VirtuosoReact Windowreact-infinite-scroller性能非常好非常好好API丰富有限有限虚拟化支持YesYesYesSSR渲染支持YesYesNo自定制有限好有限易于使用容易容易容易面向开发人员的内置功能提供分页和无限加载功能。开发者社区实现了带有Chrome和Firefox扩展的开发者工具GUI。支持将缓存持久化到外部存储位置(即本地存储)。提供分页和无限加载功能。它带有一个官方的开发人员工具GUI,支持缓存操作。支持将缓存持久化到外部存储位置(即本地存储)。N/AReact suspense支持支持N/A对其他前端库的官方支持否,类似的社区库可用:sswr在进行中,类似的社区库可用:vue-queryN/A 总结

高效渲染大型数据集是 Web 开发的一个关键方面。虚拟化是一种使开发人员能够有效地呈现大型数据集并提高 Web 应用程序性能的技术。

在本文中,我们探讨了可用于 React 的各种虚拟化列表库,包括 React Virtuoso、React Window 和 react-infinite-scroll。每个库都有其优点和缺点,库的选择取决于特定的用例。通过使用这些虚拟化列表库,您可以显著提高 React应用程序的性能并提供更流畅的用户体验。



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭