”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > React 应用程序的基本设计模式:升级您的组件游戏

React 应用程序的基本设计模式:升级您的组件游戏

发布于2024-09-28
浏览:695

Essential Design Patterns for React Apps: Leveling Up Your Component Game

如果您已经进入 React 世界一段时间,您可能听说过“这只是 JavaScript”这句话。虽然这是事实,但这并不意味着我们不能从一些经过验证的模式中受益,使我们的 React 应用程序更易于维护、可重用并且使用起来更加愉快。让我们深入研究一些基本的设计模式,这些模式可以让你的 React 组件从“meh”到“marvelous”!

为什么设计模式在 React 中很重要

在我们开始之前,让我们解决房间里的大象:为什么要费心设计模式呢?好吧,我的 React 爱好者同胞,设计模式就像编码世界的秘方。它们是针对常见问题的经过实战检验的解决方案,可以:

  1. 使您的代码更具可读性和可维护性
  2. 促进整个应用程序的可重用性
  3. 用优雅的解决方案解决复杂问题
  4. 帮助您更有效地与其他开发者沟通想法

现在我们已经达成共识,让我们探索一些模式,让您的 React 组件比刚打蜡的跑车更加闪亮!

1. 组件组合模式

React 的组件模型本身就已经是一个强大的模式,但通过组合更进一步可以带来更灵活和可重用的代码。

// Instead of this:
const Button = ({ label, icon, onClick }) => (
  
);

// Consider this:
const Button = ({ children, onClick }) => (
  
);

const IconButton = ({ icon, label }) => (
  
);

为什么它很棒:

  • 更灵活和可重用的组件
  • 更容易定制和扩展
  • 遵循单一职责原则

专业提示:将您的组件视为乐高积木。它们的模块化程度和可组合性越强,您可以构建的结构就越令人惊叹!

2. 容器/展示模式

此模式将组件的逻辑与其表示分离,使其更容易推理和测试。

// Container Component
const UserListContainer = () => {
  const [users, setUsers] = useState([]);

  useEffect(() => {
    fetchUsers().then(setUsers);
  }, []);

  return ;
};

// Presentational Component
const UserList = ({ users }) => (
  
    {users.map(user => (
  • {user.name}
  • ))}
);

为何如此震撼:

  • 明确的关注点分离
  • 更容易测试和维护
  • 促进演示组件的可重用性

记住:容器就像戏剧的后台工作人员,处理所有幕后工作,而演示组件是演员,只专注于为观众提供好看的外观。

3. 高阶组件(HOC)模式

HOC 是接受组件并返回带有一些附加功能的新组件的函数。它们就像您组件的电源!

const withLoader = (WrappedComponent) => {
  return ({ isLoading, ...props }) => {
    if (isLoading) {
      return ;
    }
    return ;
  };
};

const EnhancedUserList = withLoader(UserList);

为什么很酷:

  • 允许跨不同组件重用代码
  • 保持您的组件清洁和集中
  • 可以组合进行多项增强

警告:虽然 HOC 很强大,但如果过度使用,它们可能会导致“包装地狱”。明智地使用它们!

4. 渲染道具模式

此模式涉及将函数作为 props 传递给组件,让您可以更好地控制渲染的内容。

const MouseTracker = ({ render }) => {
  const [position, setPosition] = useState({ x: 0, y: 0 });

  const handleMouseMove = (event) => {
    setPosition({ x: event.clientX, y: event.clientY });
  };

  return (
    
{render(position)}
); }; // Usage (

The mouse is at ({x}, {y})

)} />

为什么它很漂亮:

  • 高度灵活且可重用
  • 避免 HOC 问题,例如 prop 命名冲突
  • 允许基于提供的函数进行动态渲染

有趣的事实:渲染道具模式非常灵活,它甚至可以实现我们讨论过的大多数其他模式!

5. 自定义 Hook 模式

钩子是 React 中的新成员,自定义钩子允许您将组件逻辑提取到可重用函数中。

const useWindowSize = () => {
  const [size, setSize] = useState({ width: 0, height: 0 });

  useEffect(() => {
    const handleResize = () => {
      setSize({ width: window.innerWidth, height: window.innerHeight });
    };

    window.addEventListener('resize', handleResize);
    handleResize(); // Set initial size

    return () => window.removeEventListener('resize', handleResize);
  }, []);

  return size;
};

// Usage
const MyComponent = () => {
  const { width, height } = useWindowSize();
  return 
Window size: {width} x {height}
; };

为何如此神奇:

  • 允许在组件之间轻松共享状态逻辑
  • 保持您的组件清洁和集中
  • 可以替代 HOC 和渲染道具的许多用途

专业提示:如果您发现自己在多个组件中重复类似的逻辑,那么可能是时候将其提取到自定义挂钩中了!

结论:模式增强您的 React 应用程序

React 中的设计模式就像一条装满小工具的实用腰带 - 无论您的应用程序给您带来什么挑战,它们都会为您提供适合工作的工具。记住:

  1. 使用组件组合实现灵活的模块化 UI
  2. 利用容器/演示来明确关注点分离
  3. 采用 HOC 来解决跨领域问题
  4. 利用渲染道具实现终极灵活性
  5. 创建自定义 Hook 来共享状态逻辑

通过将这些模式合并到你的 React 工具包中,你将能够很好地创建更多可维护、可重用和优雅的组件。当你未来的自己(和你的队友)轻松浏览你结构良好的代码库时,他们会感谢你!

编码愉快!

版本声明 本文转载于:https://dev.to/alessandrorodrigo/essential-design-patterns-for-react-apps-leveling-up-your-component-game-l8c?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何在不使用嵌套查询的情况下从 MySQL 中的查询结果分配用户变量?
    如何在不使用嵌套查询的情况下从 MySQL 中的查询结果分配用户变量?
    MySQL 中根据查询结果分配用户变量背景和目标根据查询结果分配用户定义的变量可以增强数据库操作能力。本文探讨了一种在 MySQL 中实现此目的的方法,而无需借助嵌套查询。用户变量赋值语法与流行的看法相反,用户变量赋值可以直接集成到查询中。 SET 语句的赋值运算符是= 或:=。但是,:= 必须在其...
    编程 发布于2024-11-06
  • 如何使用 array_column() 函数从 PHP 中的对象数组中提取 Cat ID?
    如何使用 array_column() 函数从 PHP 中的对象数组中提取 Cat ID?
    从 PHP 中的对象数组中提取猫 ID处理对象数组(例如猫对象数组)时,提取特定属性通常可以成为一项必要的任务。在这种特殊情况下,我们的目标是将每个 cat 对象的 id 属性提取到一个新数组中。正如您的问题中所建议的,一种方法涉及使用 array_walk() 和 create_function ...
    编程 发布于2024-11-06
  • 实用指南 - 迁移到 Next.js App Router
    实用指南 - 迁移到 Next.js App Router
    随着 Next.js App Router 的发布,许多开发者都渴望迁移他们现有的项目。在这篇文章中,我将分享我将项目迁移到 Next.js App Router 的经验,包括主要挑战、变化以及如何使该过程更加顺利。 这是一种增量方法,您可以同时使用页面路由器和应用程序路由器。 为...
    编程 发布于2024-11-06
  • 何时以及为何应调整 @Transactional 中的默认隔离和传播参数?
    何时以及为何应调整 @Transactional 中的默认隔离和传播参数?
    @Transactional中的隔离和传播参数在Spring的@Transactional注解中,两个关键参数定义了数据库事务的行为:隔离和传播。本文探讨了何时以及为何应考虑调整其默认值。传播传播定义了事务如何相互关联。常见选项包括:REQUIRED: 在现有事务中运行代码,如果不存在则创建一个新事...
    编程 发布于2024-11-06
  • OpenAPI 修剪器 Python 工具
    OpenAPI 修剪器 Python 工具
    使用 OpenAPI Trimmer 简化您的 OpenAPI 文件 管理大型 OpenAPI 文件可能会很麻烦,尤其是当您只需要一小部分 API 来执行特定任务时。这就是 OpenAPI Trimmer 派上用场的地方。它是一个轻量级工具,旨在精简您的 OpenAPI 文件,使其...
    编程 发布于2024-11-06
  • PHP:揭示动态网站背后的秘密
    PHP:揭示动态网站背后的秘密
    PHP(超文本预处理器)是一种服务器端编程语言,广泛用于创建动态和交互式网站。它以其简单语法、动态内容生成能力、服务器端处理和快速开发能力而著称,并受到大多数网络托管服务商的支持。PHP:揭秘动态网站背后的秘方PHP(超文本预处理器)是一种服务器端编程语言,以其用于创建动态和交互式网站而闻名。它广泛...
    编程 发布于2024-11-06
  • JavaScript 中的变量命名最佳实践,实现简洁、可维护的代码
    JavaScript 中的变量命名最佳实践,实现简洁、可维护的代码
    简介:增强代码清晰度和维护 编写干净、易理解和可维护的代码对于任何 JavaScript 开发人员来说都是至关重要的。实现这一目标的一个关键方面是通过有效的变量命名。命名良好的变量不仅使您的代码更易于阅读,而且更易于理解和维护。在本指南中,我们将探讨如何选择具有描述性且有意义的变量名称,以显着改进您...
    编程 发布于2024-11-06
  • 揭示 Spring AOP 的内部工作原理
    揭示 Spring AOP 的内部工作原理
    在这篇文章中,我们将揭开 Spring 中面向方面编程(AOP)的内部机制的神秘面纱。重点将放在理解 AOP 如何实现日志记录等功能,这些功能通常被认为是一种“魔法”。通过浏览核心 Java 实现,我们将看到它是如何与 Java 的反射、代理模式和注释相关的,而不是任何真正神奇的东西。 ...
    编程 发布于2024-11-06
  • JavaScript ESelease 笔记:释放现代 JavaScript 的力量
    JavaScript ESelease 笔记:释放现代 JavaScript 的力量
    JavaScript ES6,正式名称为 ECMAScript 2015,引入了重大增强功能和新功能,改变了开发人员编写 JavaScript 的方式。以下是定义 ES6 的前 20 个功能,它们使 JavaScript 编程变得更加高效和愉快。 JavaScript ES6 的 2...
    编程 发布于2024-11-06
  • 了解 Javascript 中的 POST 请求
    了解 Javascript 中的 POST 请求
    function newPlayer(newForm) { fetch("http://localhost:3000/Players", { method: "POST", headers: { 'Content-Type': 'application...
    编程 发布于2024-11-06
  • 如何使用 Savitzky-Golay 滤波平滑噪声曲线?
    如何使用 Savitzky-Golay 滤波平滑噪声曲线?
    噪声数据的平滑曲线:探索 Savitzky-Golay 过滤在分析数据集的过程中,平滑噪声曲线的挑战出现在提高清晰度并揭示潜在模式。对于此任务,一种特别有效的方法是 Savitzky-Golay 滤波器。Savitzky-Golay 滤波器在数据可以通过多项式函数进行局部近似的假设下运行。它利用最小...
    编程 发布于2024-11-06
  • 重载可变参数方法
    重载可变参数方法
    重载可变参数方法 我们可以重载一个采用可变长度参数的方法。 该程序演示了两种重载可变参数方法的方法: 1 各种可变参数类型:可以重载具有不同可变参数类型的方法,例如 vaTest(int...) 和 vaTest(boolean...)。 varargs 参数的类型决定了将调用哪个方法。 2 添加公...
    编程 发布于2024-11-06
  • 如何在经典类组件中利用 React Hooks?
    如何在经典类组件中利用 React Hooks?
    将 React Hooks 与经典类组件集成虽然 React hooks 提供了基于类的组件设计的替代方案,但可以通过将它们合并到现有类中来逐步采用它们成分。这可以使用高阶组件 (HOC) 来实现。考虑以下类组件:class MyDiv extends React.component { co...
    编程 发布于2024-11-06
  • 如何使用 Vite 和 React 构建更快的单页应用程序 (SPA)
    如何使用 Vite 和 React 构建更快的单页应用程序 (SPA)
    在现代 Web 开发领域,单页应用程序 (SPA) 已成为创建动态、快速加载网站的流行选择。 React 是用于构建用户界面的最广泛使用的 JavaScript 库之一,使 SPA 开发变得简单。然而,如果你想进一步提高你的开发速度和应用程序的整体性能,Vite 是一个可以发挥重大作用的工具。 在本...
    编程 发布于2024-11-06
  • JavaScript 中字符串连接的分步指南
    JavaScript 中字符串连接的分步指南
    JavaScript 中的字符串连接 是将两个或多个字符串连接起来形成单个字符串的过程。本指南探讨了实现此目的的不同方法,包括使用运算符、= 运算符、concat() 方法和模板文字。 每种方法都简单有效,允许开发人员为各种用例(例如用户消息或 URL)构建动态字符串。 模板文字尤其为字符串连...
    编程 发布于2024-11-06

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

Copyright© 2022 湘ICP备2022001581号-3