如何应用 SOLID 原则在 React 中整理代码之开闭原则

简介: SOLID 是一套原则。它们主要是关心代码质量和可维护性的软件专业人员的指导方针。

640 (5).png

SOLID 是一套原则。它们主要是关心代码质量和可维护性的软件专业人员的指导方针。


React 不是面向对象,但这些原则背后的主要思想可能是有帮助的。在本文中,我将尝试演示如何应用这些原则来编写更好的代码。


在前一篇文章中,我们讨论了单一责任原则。今天,我们将讨论 SOLID 的第二个原则: 开闭原则。


本系列其他文章



什么是开闭原则?


Robert c. Martin 认为这个原则是面向对象设计最重要的原则。但他不是第一个定义这个概念的人。Bertrand Meyer 于 1988 年在他的《面向对象软件构造》一书中写到了这一点。他解释了开放/封闭原则:


软件实体(类、模块、功能等)应该对扩展开放,但对修改关闭。


这个原则告诉您以这样一种方式来编写代码,即您能够在不更改现有代码的情况下添加其他功能。


让我们看看我们在哪里可以应用这个原则。


让我们从一个例子开始


假设我们有一个 User 组件,其中我们传递用户的详细信息,这个类的主要目的是显示该特定用户的详细信息。


这是一个很简单的开始。但是我们的生活并不是那么简单。几天后,我们的经理告诉我们系统中有三种类型的用户: SuperAdminAdmin 等等。


它们每个都有不同的信息和功能。


一个糟糕的解决方案


第一个也是显而易见的解决方案:在组件中包含一个条件,并根据不同的用户类型呈现不同的信息。


import React from 'react';
export const User = ({user}) => {
    return <>
        <div> Name: {user.name}</div>
        <div> Email: {user.email}</div>
        {
            user.type === 'SUPER_ADMIN' &&
            <div> Details about super admin</div>
        }
        {
            user.type === 'ADMIN' &&
            <div> Details about admin</div>
        }
    </>
}


你知道这里出了什么问题吗?


首先,我们的代码现在是凌乱的。


其次,如果我们需要其他类型的用户怎么办?


然后,我们需要进入 User.js,为特定类型的用户添加另一个条件。


这明显违反了开闭原则,因为我们不允许更改 User 组件内部的代码。


解决方案是什么?


在这个场景中我们可以应用两种主要的技术:


  1. 高阶组件(HOC)


  1. 组件组合(Component composition)


在可能的情况下,最好采用第二种方法,但是在某些情况下,有必要使用 HOC。

现在,我们将使用 Facebook 推荐的一种技术,称为组件组合


让我们创建单独的用户组件


现在,我们需要以这样一种方式设计代码,即不需要在 User.js 组件中添加条件。让我们为 SuperAdmin 创建一个单独的组件:


import React from 'react';
import {User} from "./User";
export const SuperAdmin = ({user}) => {
    return <>
        <User user={user} />
        <div> This is super admin user details</div>
    </>
}


类似地,另一个是针对 Admin 用户的:


import React from 'react';
import {User} from "./User";
export const Admin = ({user}) => {
    return <>
        <User user={user} />
        <div> This is admin user details</div>
    </>
}


现在我们的 App.js 文件变成了:


import React from 'react';
import Admin from './Admin'
import SuperAdmin from './SuperAdmin'
export default function App = () =>{
  const user = {}
  const userByTypes = {
    'admin' : <Admin /> ,
    'superadmin' : <SuperAdmin />
  }
  return <div>
    {userByTypes[`${user.type}`]}
  <div/>
}


现在我们可以根据需要创建尽可能多的用户类型。我们针对特定用户的逻辑是封装的,因此我们不需要为了任何额外的修改而重新检查代码。


有些人可能会说,我们正在不必要地增加文件数量。当然,您可以暂时保持原样,但是随着应用程序的复杂性增加,您肯定会感到痛苦。


注意


SOLID 是一套原则。它们并不是强制性的,您必须应用于每个场景。作为一个经验丰富的开发人员,您应该在代码长度和可读性之间找到一个很好的平衡。


要过分执着于这些原则。事实上,有一句名言可以解释这些情况:


Too Much SOLID


所以知道这些原则是好的,但是你必须保持平衡。对于一个或两个额外的字段,您可能不需要这些组合,但是将它们分开肯定会有长远的帮助。


总结


了解这些原则会让你走很长的路,因为在一天结束的时候,一段好的代码才是最重要的,而且没有单一的方法来做事情。


本文为译文,原文链接:https://betterprogramming.pub/applying-the-open-closed-principle-to-write-clean-react-components-4e4514963e40


目录
相关文章
|
9天前
|
监控 前端开发 API
React代码在电脑监控软件开发中的应用
这篇文章除了介绍React在电脑监控软件开发中的应用,还展示了如何通过组件化构建监控界面,如`MonitorDashboard`、`StatusWidget`和`ActivityLog`组件。文章强调了React的生命周期方法和Hooks在实时数据获取和显示中的作用,如`SystemStatus`组件的`useEffect`钩子。此外,还讲解了如何监听和记录用户行为的`UserActivity`组件,以及利用axios自动提交监控数据的`DataSubmitter`组件。React的这些特性使得开发高效、响应式的监控软件变得更加便捷。
40 8
|
1月前
|
前端开发 开发者
探索前端框架的新趋势:React Hooks的应用与实践
本文将深入探讨前端开发中的新趋势,重点介绍React Hooks的应用与实践。通过学习和使用React Hooks,开发者可以更高效地构建可维护、可扩展的前端应用程序。本文将详细介绍React Hooks的原理、优势以及如何在实际项目中运用Hooks来提高开发效率并改善代码结构。无论你是刚入门前端开发还是经验丰富的工程师,本文都将对你有所启发。
|
1月前
|
前端开发 数据可视化 UED
React的代码分割:使用React.lazy和Suspense进行性能优化
【4月更文挑战第25天】使用React的`React.lazy`和`Suspense`进行代码分割可优化性能,按需加载组件以提升应用启动速度和用户体验。`React.lazy`接收返回Promise的组件动态导入,而`Suspense`提供加载指示器,保证加载过程中的用户体验。适用于大型组件或路由应用,但需注意服务器配置、避免过度拆分和确保关键代码即时加载。合理运用能显著改善应用性能。
|
1月前
|
设计模式 前端开发 API
写出易维护的代码|React开发的设计模式及原则
本文对React社区里出现过的一些设计模式进行了介绍,并讲解了他们遵循的设计原则。
|
1月前
|
前端开发 JavaScript 定位技术
Docusaurus框架——react+antd+echarts自定义mdx生成图表代码解释文档
Docusaurus框架——react+antd+echarts自定义mdx生成图表代码解释文档
49 0
|
1月前
|
存储 JavaScript 前端开发
React中的Redux:简介和实例代码
React中的Redux:简介和实例代码
37 1
|
1月前
|
前端开发 开发者
React Hooks:提升前端开发效率和代码可维护性
传统的 React 类组件在处理状态管理和生命周期函数时存在一些限制,而引入的 React Hooks 技术可以帮助前端开发者更高效地管理组件状态和逻辑,提升代码的可读性和可维护性。本文将介绍 React Hooks 的基本用法及其在实际项目中的应用场景。
|
1月前
|
前端开发 JavaScript 安全
使用React、TypeScript和Ant Design构建现代化前端应用
使用React、TypeScript和Ant Design构建现代化前端应用
68 0
|
1月前
|
开发框架 前端开发 JavaScript
使用React、Redux和Bootstrap构建社交媒体应用
使用React、Redux和Bootstrap构建社交媒体应用
29 0
|
1月前
|
前端开发 IDE 小程序
【社区每周】React Native 初探;应用中支持添加应用管理员(2月第一期)
【社区每周】React Native 初探;应用中支持添加应用管理员(2月第一期)
53 11