”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 增强 React 列表渲染:干净且可重用的模式

增强 React 列表渲染:干净且可重用的模式

发布于2024-11-08
浏览:364

Enhancing React List Rendering: A Clean and Reusable Pattern

作为 React 开发人员,我们都遇到过需要渲染数据列表的场景。虽然 .map() 方法效果很好,但每次渲染列表时重复相同的逻辑可能会让人筋疲力尽,并导致代码重复。幸运的是,有一种更干净、可扩展的方法来处理这个问题,使用可重用组件、高阶组件或自定义挂钩。

在本文中,我将分享一种改进 React 中列表渲染的方法,确保您的代码保持 DRY、可重用且更易于维护。

主要问题:重复的.map()逻辑

假设您正在为电子商务应用程序构建仪表板。仪表板包含多个列表:最近订单、最畅销产品、用户评论等。您需要使用 .map() 函数呈现每个列表。这是一个典型的例子:

const orders = [...]; // Array of order data

return (
  
    {orders.map((order, index) => (
      
    ))}
  >
);

现在,您可以看到每个列表都重复 .map() 逻辑,类似的代码使您的组件变得混乱。这就是可重用模式可以派上用场的地方。

解决方案:可重用的ListComponent

为了避免重复 .map() 逻辑,我们可以创建一个可重用的 ListComponent 来抽象映射逻辑,并允许我们根据数据渲染不同的组件。

function ListComponent({ data, renderItem }) {
  return (
    
      {data.map((item, index) => renderItem(item, index))}
    >
  );
}

用法:

 (
    
  )} 
/>

在此模式中:
renderItem:定义每个项目应如何呈现的函数

通过传递不同的 renderItem 函数,我们可以为任何列表重用 ListComponent。这会产生一个干净、可重用的组件,减少重复的 .map() 逻辑。

更灵活:高阶组件(HOC)

如果多个组件需要列表渲染,让我们通过创建一个高阶组件来进一步采用此模式。 HOC 允许通过附加功能增强任何组件 - 在本例中为列表渲染。

function withListRendering(WrappedComponent) {
  return function ListWrapper({ data, ...props }) {
    return (
      
        {data.map((item, index) => (
          
        ))}
      >
    );
  };
}

用法:

const EnhancedOrderComponent = withListRendering(OrderComponent);

// Now render the component with any data array

通过使用 withListRendering HOC 包装 OrderComponent,我们自动添加了列表渲染行为,而无需修改原始组件。这种模式使代码保持模块化。

对于 Hook 爱好者:用于列表渲染的自定义 Hook

React hooks 提供了一种封装逻辑的函数式方法。如果您更喜欢使用钩子,这里是使用自定义钩子渲染列表的示例。

function useListRenderer(data, renderItem) {
  return data.map((item, index) => renderItem(item, index));
}

用法:

function OrdersDashboard({ orders }) {
  const orderList = useListRenderer(orders, (order, index) => (
    
  ));

  return {orderList}>;
}

这种方法将 .map() 逻辑移动到钩子中,使渲染逻辑与组件的结构分开。这是保持组件精简并专注于演示的另一种方法。

现实场景:电子商务仪表板

让我们将此模式应用到现实场景中。想象一下,您正在构建一个电子商务管理仪表板,其中需要呈现多个订单、产品、评论等列表。

使用 ListComponent 方法,您可以呈现如下订单列表:

 (
    
  )} 
/>

当我们需要渲染不同的列表(例如产品)时,相同的 ListComponent 可以与不同的 renderItem 函数重用:

 (
    
  )} 
/>

无需重写 .map() 逻辑 - 只需将 ListComponent 与不同的数据和组件重用即可。这使得代码库在增长时更易于维护。

结论:干净、可重用且可扩展的代码

可重用的 ListComponent 模式通过抽象重复的 .map() 逻辑来简化 React 列表渲染。无论您喜欢使用基本组件方法、HOC 还是自定义挂钩,此模式都可确保代码干净且可重用。

构建具有多个列表的 React 组件,请考虑使用其中一种模式来使组件专注于表示,同时将列表逻辑分离到外部。

您发现 React 中还有哪些其他有用的可重用模式?请在评论中告诉我! 最后感谢您的阅读

版本声明 本文转载于:https://dev.to/readwanmd/enhancing-react-list-rendering-a-clean-and-reusable-pattern-1d94?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 使用 SAM 框架构建 Go Serverless REST API 并部署到 AWS (Amazon Linux untime)
    使用 SAM 框架构建 Go Serverless REST API 并部署到 AWS (Amazon Linux untime)
    为什么还要另一个 Go 教程 AWS 最近已弃用多项服务和运行时。正如我们所看到的,随着我们喜爱的 CodeCommit 和其他关键服务的终止,AWS Lambda 函数不再支持 Go1.x。 如果您尝试部署大部分过时的教程,您可能会遇到如下错误: Resource creatio...
    编程 发布于2024-11-08
  • C 中的不相交联合
    C 中的不相交联合
    目前还不清楚如何在 C: 中表达此 Haskell 类型 data Tree = Leaf Int | Inner Tree Tree 与 Haskell 和 Rust 等语言不同,C 缺乏对的内置支持 不相交联合。然而,如果我们愿意做一些额外的输入,它确实提供了代表它们所需的所有成分。 首先要认识...
    编程 发布于2024-11-08
  • 社交媒体上的图文帖子有何作用?
    社交媒体上的图文帖子有何作用?
    图形帖子通过提高用户参与度和强化品牌形象在社交媒体营销中发挥着至关重要的作用。在 Instagram、LinkedIn 和 Facebook 等快节奏的社交平台中,用户滚动浏览大量内容,引人注目的视觉效果可以让您的帖子脱颖而出。图形快速有效地传达信息,使其成为与受众沟通的强大工具。 ...
    编程 发布于2024-11-08
  • 如何使用 javac、Ant 或 Maven 递归编译多个 Java 文件?
    如何使用 javac、Ant 或 Maven 递归编译多个 Java 文件?
    如何使用 javac 递归编译所有 Java 文件为每个包使用单独的 shell 命令编译分布在多个包中的大量 Java 文件可能会很乏味包裹。相反,请考虑使用以下方法之一来简化编译。方法 1:使用 @source生成一个文本文件(例如,sources.txt) txt),其中列出了要编译的所有 J...
    编程 发布于2024-11-08
  • 如何使用 Python 在文件的特定位置插入一行?
    如何使用 Python 在文件的特定位置插入一行?
    在Python中的文件中间插入一行在文件中的指定位置插入一行,同时保持文件的完整性现有内容可以使用 Python 的文件处理功能来实现。要在文件中的索引 x 处插入一行,请按照下列步骤操作:打开文件进行读取。使用 readlines() 方法将整个文件读入行列表。使用 insert() 方法在指定索...
    编程 发布于2024-11-08
  • ## 当方法具有指针接收器时,我什么时候应该避免在 Go 中复制实例?
    ## 当方法具有指针接收器时,我什么时候应该避免在 Go 中复制实例?
    复制实例时指针接收器的重要性操作数据时,理解按引用或按值传递值的细微差别至关重要。在 Go 中,方法可以使用值接收器或指针接收器来定义,理解这种选择的含义至关重要,尤其是在复制实例时。值接收器具有值接收器的方法对它们接收到的值的副本进行操作。方法内所做的任何修改都不会影响原始值。这确保了在复制的实例...
    编程 发布于2024-11-08
  • 如何修改不可变 Python 字符串中的单个字符?
    如何修改不可变 Python 字符串中的单个字符?
    错误:'str'对象不支持项目分配Python字符串是不可变的,这意味着一旦创建,它们的单个字符就不能被修改修改的。尝试直接使用项目分配来修改字符(如代码 s2[j] = s1[i] 中所示)会导致错误“TypeError: 'str' 对象不支持项目分配。”此行为与...
    编程 发布于2024-11-08
  • 使用 Java Spring Boot 和 JdbcTemplate 配置 JDBC 以连接到 Databricks
    使用 Java Spring Boot 和 JdbcTemplate 配置 JDBC 以连接到 Databricks
    在软件开发领域,连接到各种数据源是一项基本技能。 Databricks 是一个基于云的数据分析平台,提供了一种处理和分析大量数据的强大方法。在这篇文章中,我们将探讨如何使用 Java 和 Spring 的 JdbcTemplate 配置 JDBC 连接来连接到 Databricks,从而使您能够充分...
    编程 发布于2024-11-08
  • Copilotkit:您的编码冒险人工智能僚机
    Copilotkit:您的编码冒险人工智能僚机
    简介:当人工智能遇见代码(火花四溅) 在不断发展的科技世界中,算法起舞,数据流歌唱,镇上出现了一位新玩家:Copilotkit。这就像有一个非常聪明的朋友,他从不睡觉,不会喝掉你所有的咖啡,也不会因为你凌晨 3 点穿着睡衣编码而评判你。欢迎来到编码的未来,人工智能不仅是辅助,而且是...
    编程 发布于2024-11-08
  • 如何修复 Mac 上的 Java 8 安装问题
    如何修复 Mac 上的 Java 8 安装问题
    解决 Mac 上 Java 8 的安装问题您关于 Mac 上 Java 8 安装文件的意外位置和兼容性挑战的查询重点开发商面临的共同问题。本文旨在提供一个全面的解决方案来解决这些问题。安装异常Oracle的Java安装程序倾向于将Java 8文件放在/Library/Java/JavaVirtual...
    编程 发布于2024-11-08
  • 在空数据集上使用 MySQL 的 SUM 函数时如何返回“0”而不是 NULL?
    在空数据集上使用 MySQL 的 SUM 函数时如何返回“0”而不是 NULL?
    当不存在任何值时如何从 MySQL 的 SUM 函数中检索“0”MySQL 中的 SUM 函数提供了一种方便的方法来聚合数值价值观。但是,当查询期间没有找到匹配的行时,SUM 函数通常返回 NULL 值。对于某些用例,可能更需要返回“0”而不是 NULL。利用 COALESCE 解决问题此问题的解决...
    编程 发布于2024-11-08
  • useMemo 与 useCallback
    useMemo 与 useCallback
    介绍 React 提供了广泛的钩子来帮助我们高效地构建动态应用程序。在这些钩子中,useMemo和useCallback是提高组件性能的重要工具。尽管两者都有相似的目的——防止不必要的重新计算或函数重新创建——但它们适用于不同的场景。 在本文中,我们将探讨 useMemo 和 us...
    编程 发布于2024-11-08
  • 为什么 MDM 很重要:优势和商业价值
    为什么 MDM 很重要:优势和商业价值
    在当今的数字经济中,数据是每个成功企业的基石。随着组织生成的信息呈指数级增长,主数据的有效管理已成为当务之急。主数据管理 (MDM) 是管理组织关键数据资产(例如客户信息、产品详细信息和财务记录)的战略流程,确保所有部门和系统的准确性、一致性和可访问性。但为什么 MDM 很重要?更重要的是,它能带来...
    编程 发布于2024-11-08
  • 是什么导致 Google Chrome 的 Console.log() 中数组和对象的行为不一致?
    是什么导致 Google Chrome 的 Console.log() 中数组和对象的行为不一致?
    Google Chrome 的 console.log() 表现出数组和对象不一致的行为了解问题在 Google Chrome 中调试代码时,观察到 console.log() 在处理嵌套数组时表现得很奇怪。记录数组时,在记录后修改其内部值会导致记录的输出反映更新后的值而不是记录时的值。 Firef...
    编程 发布于2024-11-08
  • 在 PHP 中按对象字段对对象数组进行排序
    在 PHP 中按对象字段对对象数组进行排序
    在 PHP 中,有多种方法可以按对象字段对对象数组进行排序。以下是一些常见的方法: 将 usort() 函数与自定义比较函数结合使用 实现自定义排序算法 利用 array_multisort() 函数 将 usort() 函数与自定义比较函数结合使用 以下是在 PHP 中使用 us...
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3