首页 > 其他分享 >开闭原则在react中应用

开闭原则在react中应用

时间:2024-09-16 09:53:51浏览次数:11  
标签:function return 原则 开闭 react 修改 props 组件 icon

定义

“软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。”

这意味着我们应该能够添加新的功能或行为,而无需修改现有的代码。

对扩展开放 => 允许通过拓展来添加新功能或行为
对修改关闭 => 不直接修改现有代码

分析

对应到react中,首选的场景就是组件了。react的组件的props其实就是开闭原则的一个很好的例子。因为我们可以通过props添加新增行为而无需修改现有代码。

反例

下面这个组件在初期应该能工作良好,但当我们需要添加新的按钮类型时,就不得不进入组件内部进行修改,这简单直接的违反了开闭原则。

function Button(props) {
  const { type } = props;

  let icon = null;

  if (type === 'face') {
    icon = <FaceIcon />;
  }

  if (type === 'star') {
    icon = <StarIcon />;
  }

  if (type === 'like') {
    icon = <LikeIcon />;
  }

  return <button>{icon}Click me</button>;
}

function App() {
  return (
    <>
      <Button type="face" />
      <Button type="star" />
      <Button type="like" />
    </>
  );
}

正例

在下面的代码中,我们通过传入icon为组件添加了新的行为,并且没有修改现有的组件代码。

function Button(props) {
  const { icon } = props;

  return <button>{icon}Click me</button>;
}

function App() {
  return (
    <>
      <Button icon={<FaceIcon />} />
      <Button icon={<StarIcon />} />
      <Button icon={<LikeIcon />} />
    </>
  );
}

我们甚至可以更进一步,将icon重命名为prefix,这样就不仅限于icon,我们可以传递各种类型来实现我们想要的需求,让组件具有更高的灵活性。(react中的props.children也是这个道理)

function Button(props) {
  const { prefix } = props;

  return <button>{prefix}Click me</button>;
}

function App() {
  return (
    <>
      <Button prefix={<FaceIcon />} />
      <Button prefix={<StarIcon />} />
      <Button prefix={<LikeIcon />} />
    </>
  );
}

结论

通过上面的组件代码,我们可以发现应用了开闭原则的版本有以下优点:

降低风险:
直接修改现有代码可能会引入错误,导致组件不稳定。而通过扩展而不是修改,我们可以减少这种风险。

易于维护:
可以更容易地维护代码,当我们需要添加新功能时,我们只需关注新增的部分,而不必担心影响其他地方。这也有助于降低维护成本。

灵活性:
通过对扩展开放,我们可以在不修改现有代码的情况下引入新功能。这使得我们的组件更加灵活,能够适应不断变化的需求。

标签:function,return,原则,开闭,react,修改,props,组件,icon
From: https://blog.51cto.com/u_11365839/12030011

相关文章

  • 指令系统 -- 2.2 指令系统设计原则
    指令系统是软硬件的接口,程序员根据指令系统设计软件,硬件设计人员根据指令系统实现硬件。指令系统稍微变化,一系列软硬件都会受到影响,所以指令系统的设计应遵循如下基本原则:兼容性。这是指令系统的关键特性。最好能在较长时间内保持指令系统不变并保持向前兼容,例如X86指令系统,虽然......
  • 引言 -- 1.4 体系结构设计的基本原则
    计算机体系结构发展很快,但在发展过程中遵循一些基本原则,这些原则包括平衡性、局部性、并行性和虚拟化。1.4.1平衡性结构设计的第一个原则就是要考虑平衡性。一个木桶所盛的水量的多少由最短的木板决定,一个结构最终体现出的性能受限于其瓶颈部分。计算机是个复杂系统,影响性能的......
  • ReAct && MRKL
    ReActhttps://learnprompting.org/docs/advanced_applications/react WhatisReAct?ReAct1(Reason+Act)isaparadigmthatenableslanguagemodelstosolvecomplextasksthroughnaturallanguagereasoningandactions.ItallowsanLLMtoperformcertain......
  • 信息架构的战略视角:驱动数字化转型的设计原则与实践创新
    在数字经济快速发展的今天,企业的成功越来越依赖于其信息架构的稳健性和灵活性数字化转型不仅要求技术创新,更需要架构设计上的深思熟虑。《信息架构:商业智能&分析与元数据管理参考模型》作为信息架构领域的权威指南,为企业提供了宝贵的实践经验和应用策略。《信息架构:商业智能&......
  • 青少年编程与数学 01-010 青少年成长管理 第九章 计划 6_2 计划原则
    青少年编程与数学01-010青少年成长管理第九章计划6_2计划原则第二节计划原则一、幸福生活,快乐成长二、面向未来,兼顾眼前(一)面向未来(1)顺应社会发展趋势(2)培养适应力与创新能力(3)关注个人兴趣与价值观(二)兼顾眼前(1)打好基础教育(2)适时调整与反馈(3)注重实践经验积累三、......
  • react-pdf预览在线PDF的使用
    1、在react项目中安装react-pdf依赖包建议安装8.0.2版本的react-pdf,如果安装更高版本的可能出现一些浏览器的兼容性问题;[email protected] 1、PC端的使用1.1、封装一个组件:PdfViewModal.tsximportReact,{useState}from'react'import{Modal,Spin,......
  • 学习高校课程-软件设计模式-软件设计原则(lec2)
    FeatureofGoodDesign(1)优秀设计的特点(一)Codereuse代码复用–Challenge:tightcouplingbetweencomponents,dependenciesonconcreteclassesinsteadofinterfaces,hardcodedoperations–Solution:designpatterns–挑战:组件之间的紧密耦合、对具体类而不......
  • MySQL数据库索引设计的主要原则
    在MySQL数据库中,索引设计是提高查询性能的关键因素之一。什么是索引?索引是数据库中用于提高数据检索效率的数据结构。它类似于书籍的目录,允许用户快速找到所需的数据,而无需扫描整个数据集。在数据库系统中,索引通常用于加速查询操作,特别是对于大型数据集。以下是索引的一些关......
  • react-intl
    react-intl6.6.8 • Public • Published 4monthsago ReadmeCode Beta10Dependencies3,811Dependents330VersionsReactIntlWe'vemigratedthedocsto https://formatjs.io/docs/getting-started/installation.ReadmeKeywordsintli18nin......
  • Code-Prompt-03: ToolUse (ReAct)
    https://github.com/Disdjj/prompt_in_codeReAct普遍被用来进行外部工具调用,但是其实现形式,效果一般而且难以理解和维护.本文就带来Code-Prompt下的ReAct模式,即实现外部调用.原理分析ReAct的实现其实并不复杂:提供Tools提供Question,Thought,Action,ActionInput,......