在React中怎么应用SOLID原则


本篇内容介绍了“在React中怎么应用SOLID原则”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!单一职责原则的定义是每个类应该只有一个职责,也就是只做一件事。这个原则是最容易解释的,因为我们可以简单地将其理解为“每个功能/模块/组件都应该只做一件事”。在所有这些原则中,单一职责原则是最容易遵循的,也是最有影响力的一项,因为它极大提高了代码的质量。为了确保组件只做一件事,可以这样:将功能较多的大型组件拆分为较小的组件。将与组件功能无关的代码提取到单独的函数中。将有联系的功能提取到自定义 Hooks 中。下面来看一个显示活跃用户列表的组件:{user.fullName}这个组件虽然代码不多,但是做了很多事情:获取数据、过滤数据、渲染数据。来看看如何分解它。首先,只要同时使用了useState和useEffect,就可以将它们提取到自定义 Hook 中:{user.fullName}现在,useUsersHook只关心一件事——从API获取用户。它使我们的组件代码更具可读性。接下来看一下组件渲染的 JSX。每当我们对对象数组进行遍历时,都应该注意它为每个数组项生成的 JSX 的复杂性。如果它是一个没有附加任何事件处理函数的单行代码,将其保持内联是完全没有问题的。但对于更复杂的JSX,将其提取到单独的组件中可能是一个更好的主意:{user.fullName}这里将用于呈现用户信息的逻辑提取到了一个单独的组件中,从而使我们的组件更小、更可读。最后,从 API 获取到的用户列表中过滤出所有非活跃用户的逻辑是相对独立的,可以在其他部分重用,所以可以将其提取到一个公共函数中:到现在为止,通过上面三步拆解,组件已经变得比较简单。但是,仔细观察会发现,这个组件还有优化的空间。目前,组件首先获取数据,然后需要对数据进行过滤。理想情况下,我们只想获取数据并渲染它,而不需要任何额外的操作。所以,可以将这个逻辑封装到一个新的自定义 Hook 中,最终的代码如下:{user.fullName}在这里,我们创建了useActiveUsersHook 来处理获取和过滤数据的逻辑,而组件只做了最少的事情——渲染它从 Hook 中获取的数据。现在,这个组件只剩下两个职责:获取数据和渲染数据,当然我们也可以在组件的父级获取数据,并通过 props 传入该组件,这样只需要渲染组件就可以了。当然,还是要视情况而定。我们可以简单地将获取并渲染数据看作是“一件事”。总而言之,遵循单一职责原则,我们有效地采用了大量独立的代码并使其更加模块化,模块化的代码更容易测试和维护。开放封闭原则指出“一个软件实体(类、模块、函数)应该对扩展开放,对修改关闭”。开放封闭原则主张以一种允许在不更改源代码的情况下扩展组件的方式来构造组件。下面来看一个场景,有一个可以在不同页面上使用的Header组件,根据所在页面的不同,Header组件的 UI 应该有略微的不同:这里,根据所在页面的不同,呈现指向不同页面组件的链接。那现在考虑一下,如果需要将这个Header组件添加到更多的页面中会发生什么呢?每次创建新页面时,都需要引用Header组件,并修改其内部实现。这种方式使得Header组件与使用它的上下文紧密耦合,并且违背了开放封闭原则。为了解决这个问题,我们可以使用组件组合。Header组件不需要关心它将在内部渲染什么,相反,它可以将此责任委托给将使用children属性的组件:使用这种方法,我们完全删除了Header组件内部的变量逻辑。现在可以使用组合将想要的任何内容放在Header中,而无需修改组件本身。遵循开放封闭原则,可以减少组件之间的耦合,使它们更具可扩展性和可重用性。里氏替换原则可以理解为对象之间的一种关系,子类型对象应该可以替换为超类型对象。这个原则严重依赖类继承来定义超类型和子类型关系,但它在 React 中可能不太适用,因为我们几乎不会处理类,更不用说类继承了。虽然远离类继承会不可避免地将这一原则转变为完全不同的东西,但使用继承编写 React 代码会使代码变得糟糕(React 团队不推荐使用继承)。因此,对于这一原则不再过多解释。根据接口隔离原则的说法,客户端不应该依赖它不需要的接口。为了更好的说明 ISP 所针对的问题,来看一个呈现视频列表的组件:Thumbnail组件的实现如下:Thumbnail组件非常小并且很简单,但它有一个问题:它希望将完整的视频对象作为props传入,但是仅有效地使用其属性之一(coverUrl)。除了视频,我们还需要渲染直播的缩略图,这两种媒体资源会混合在同一个列表中。下面来定义直播的类型LiveStream:这是更新后的 VideoList 组件:这时就发现一个问题,我们可以轻松的区分视频和直播对象,但是不能将后者传递给Thumbnail组件,因为Video和LiveStream类型不兼容。它们包含了不同的属性来保存缩略图:视频对象调用coverUrl,直播对象调用previewUrl。这就是使组件依赖了比实际更多的props的原因所在。下面来重构Thumbnail组件以确保它仅依赖于它需要的props:通过这样修改,现在我们可以使用它来渲染视频和直播的对略图:当然,这段代码还可以简化一下:接口隔离原则主张最小化系统组件之间的依赖关系,使它们的耦合度降低,从而提高可重用性。依赖倒置原则指出“要依赖于抽象,不要依赖于具体”。换句话说,一个组件不应该直接依赖于另一个组件,而是它们都应该依赖于一些共同的抽象。这里,“组件”是指应用程序的任何部分,可以是 React 组件、函数、模块或第三方库。这个原则可能很难理解,下面来看一个具体的例子。有一个LoginForm组件,它在提交表单时将用户凭据发送到某些 API:在这段代码中,LoginForm组件直接引用了api模块,因此它们之间存在紧密耦合。这种依赖关系就会导致一个组件的更改会影响其他组件。依赖倒置原则就提倡打破这种耦合,下面来看看如何实现这一点。首先,从LoginForm组件中删除对api模块的直接引用,而是允许通过props传入所需的回调函数:通过这样修改,LoginForm组件不再依赖于api模块。向 API 提交凭证的逻辑是通过onSubmit回调函数抽象出来的,现在由父组件负责提供该逻辑的具体实现。为此,创建了一个ConnectedLog免费云主机域名inForm组件来将表单提交逻辑委托给api模块:ConnectedLoginForm组件充当api和LoginForm之间的粘合剂,而它们本身保持完全独立。这样就可以对这两个组件进行单独的修改和维护,而不必担心修改会影响其他组件。依赖倒置原则旨在最小化应用程序不同组件之间的耦合。你可能已经注意到,最小化是所有 SOLID 原则中反复出现的关键词——从最小化单个组件的职责范围到最小化它们之间的依赖关系等等。“在React中怎么应用SOLID原则”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云主机网站,小编将为大家输出更多高质量的实用文章!

相关推荐: react如何实现点击时改变样式

今天小编给大家分享一下react如何实现点击时改变样式的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。 react实现点击时改变样式的方法:1、通…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/20 22:18
下一篇 03/20 22:19

相关推荐