欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何應(yīng)用?SOLID?原則在?React?中整理代碼之開(kāi)閉原則

 更新時(shí)間:2022年07月15日 10:18:35   作者:蕭然似我  
React?不是面向?qū)ο?,但這些原則背后的主要思想可能是有幫助的,在本文中,我將嘗試演示如何應(yīng)用這些原則來(lái)編寫(xiě)更好的代碼,對(duì)React?SOLID原則開(kāi)閉原則相關(guān)知識(shí)感興趣的朋友一起看看吧

SOLID 是一套原則。它們主要是關(guān)心代碼質(zhì)量和可維護(hù)性的軟件專(zhuān)業(yè)人員的指導(dǎo)方針。

React 不是面向?qū)ο?,但這些原則背后的主要思想可能是有幫助的。在本文中,我將嘗試演示如何應(yīng)用這些原則來(lái)編寫(xiě)更好的代碼。

在前一篇文章中,我們討論了單一責(zé)任原則。今天,我們將討論 SOLID 的第二個(gè)原則: 開(kāi)閉原則。

本系列其他文章

如何應(yīng)用 SOLID 原則在 React 中整理代碼之單一原則

什么是開(kāi)閉原則?

Robert c. Martin 認(rèn)為這個(gè)原則是面向?qū)ο笤O(shè)計(jì)最重要的原則。但他不是第一個(gè)定義這個(gè)概念的人。Bertrand Meyer 于 1988 年在他的《面向?qū)ο筌浖?gòu)造》一書(shū)中寫(xiě)到了這一點(diǎn)。他解釋了開(kāi)放/封閉原則:

軟件實(shí)體(類(lèi)、模塊、功能等)應(yīng)該對(duì)擴(kuò)展開(kāi)放,但對(duì)修改關(guān)閉。

這個(gè)原則告訴您以這樣一種方式來(lái)編寫(xiě)代碼,即您能夠在不更改現(xiàn)有代碼的情況下添加其他功能。

讓我們看看我們?cè)谀睦锟梢詰?yīng)用這個(gè)原則。

讓我們從一個(gè)例子開(kāi)始

假設(shè)我們有一個(gè) User 組件,其中我們傳遞用戶(hù)的詳細(xì)信息,這個(gè)類(lèi)的主要目的是顯示該特定用戶(hù)的詳細(xì)信息。

這是一個(gè)很簡(jiǎn)單的開(kāi)始。但是我們的生活并不是那么簡(jiǎn)單。幾天后,我們的經(jīng)理告訴我們系統(tǒng)中有三種類(lèi)型的用戶(hù): SuperAdmin、 Admin 等等。

它們每個(gè)都有不同的信息和功能。

一個(gè)糟糕的解決方案

第一個(gè)也是顯而易見(jiàn)的解決方案:在組件中包含一個(gè)條件,并根據(jù)不同的用戶(hù)類(lèi)型呈現(xiàn)不同的信息。

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>
        }
    </>
}

你知道這里出了什么問(wèn)題嗎?

首先,我們的代碼現(xiàn)在是凌亂的。

其次,如果我們需要其他類(lèi)型的用戶(hù)怎么辦?

然后,我們需要進(jìn)入 User.js,為特定類(lèi)型的用戶(hù)添加另一個(gè)條件。

這明顯違反了開(kāi)閉原則,因?yàn)槲覀儾辉试S更改 User 組件內(nèi)部的代碼。

解決方案是什么?

在這個(gè)場(chǎng)景中我們可以應(yīng)用兩種主要的技術(shù):

  • 高階組件(HOC)
  • 組件組合(Component composition)

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

現(xiàn)在,我們將使用 Facebook 推薦的一種技術(shù),稱(chēng)為組件組合。

讓我們創(chuàng)建單獨(dú)的用戶(hù)組件

現(xiàn)在,我們需要以這樣一種方式設(shè)計(jì)代碼,即不需要在 User.js 組件中添加條件。讓我們?yōu)?SuperAdmin 創(chuàng)建一個(gè)單獨(dú)的組件:

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

類(lèi)似地,另一個(gè)是針對(duì) Admin 用戶(hù)的:

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

現(xiàn)在我們的 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/>
}

現(xiàn)在我們可以根據(jù)需要?jiǎng)?chuàng)建盡可能多的用戶(hù)類(lèi)型。我們針對(duì)特定用戶(hù)的邏輯是封裝的,因此我們不需要為了任何額外的修改而重新檢查代碼。

有些人可能會(huì)說(shuō),我們正在不必要地增加文件數(shù)量。當(dāng)然,您可以暫時(shí)保持原樣,但是隨著應(yīng)用程序的復(fù)雜性增加,您肯定會(huì)感到痛苦。

注意

SOLID 是一套原則。它們并不是強(qiáng)制性的,您必須應(yīng)用于每個(gè)場(chǎng)景。作為一個(gè)經(jīng)驗(yàn)豐富的開(kāi)發(fā)人員,您應(yīng)該在代碼長(zhǎng)度和可讀性之間找到一個(gè)很好的平衡。

要過(guò)分執(zhí)著于這些原則。事實(shí)上,有一句名言可以解釋這些情況:

Too Much SOLID

所以知道這些原則是好的,但是你必須保持平衡。對(duì)于一個(gè)或兩個(gè)額外的字段,您可能不需要這些組合,但是將它們分開(kāi)肯定會(huì)有長(zhǎng)遠(yuǎn)的幫助。

總結(jié)

了解這些原則會(huì)讓你走很長(zhǎng)的路,因?yàn)樵谝惶旖Y(jié)束的時(shí)候,一段好的代碼才是最重要的,而且沒(méi)有單一的方法來(lái)做事情。

到此這篇關(guān)于如何應(yīng)用 SOLID 原則在 React 中整理代碼之開(kāi)閉原則的文章就介紹到這了,更多相關(guān)React SOLID 原則 開(kāi)閉原則內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 30分鐘精通React今年最勁爆的新特性——React Hooks

    30分鐘精通React今年最勁爆的新特性——React Hooks

    這篇文章主要介紹了30分鐘精通React今年最勁爆的新特性——React Hooks,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • React如何使用refresh_token實(shí)現(xiàn)無(wú)感刷新頁(yè)面

    React如何使用refresh_token實(shí)現(xiàn)無(wú)感刷新頁(yè)面

    本文主要介紹了React如何使用refresh_token實(shí)現(xiàn)無(wú)感刷新頁(yè)面,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 提高React界面性能的十個(gè)技巧

    提高React界面性能的十個(gè)技巧

    眾所周知,性能是Web應(yīng)用界面的關(guān)鍵方面,它直接影響到用戶(hù)的使用體驗(yàn)。本文將向您展示十種提高React UI性能的特定技術(shù)和一般方法。
    2021-05-05
  • React tabIndex使非表單元素支持focus和blur事件

    React tabIndex使非表單元素支持focus和blur事件

    這篇文章主要為大家介紹了React使用tabIndex使非表單元素支持focus和blur事件實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • ReactNative踩坑之配置調(diào)試端口的解決方法

    ReactNative踩坑之配置調(diào)試端口的解決方法

    本篇文章主要介紹了ReactNative踩坑之配置調(diào)試端口的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • React Native項(xiàng)目中使用Lottie動(dòng)畫(huà)的方法

    React Native項(xiàng)目中使用Lottie動(dòng)畫(huà)的方法

    這篇文章主要介紹了React Native 實(shí)現(xiàn)Lottie動(dòng)畫(huà)的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • React國(guó)際化react-i18next詳解

    React國(guó)際化react-i18next詳解

    react-i18next 是基于 i18next 的一款強(qiáng)大的國(guó)際化框架,可以用于 react 和 react-native 應(yīng)用,是目前非常主流的國(guó)際化解決方案。這篇文章主要介紹了React國(guó)際化react-i18next的相關(guān)知識(shí),需要的朋友可以參考下
    2021-10-10
  • 解決React報(bào)錯(cuò)Cannot assign to 'current' because it is a read-only property

    解決React報(bào)錯(cuò)Cannot assign to 'current'

    這篇文章主要為大家介紹了React報(bào)錯(cuò)Cannot assign to 'current' because it is a read-only property的解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 基于React-Dropzone開(kāi)發(fā)上傳組件功能(實(shí)例演示)

    基于React-Dropzone開(kāi)發(fā)上傳組件功能(實(shí)例演示)

    這篇文章主要介紹了基于React-Dropzone開(kāi)發(fā)上傳組件,主要講述的是在React-Flask框架上開(kāi)發(fā)上傳組件的技巧,需要的朋友可以參考下
    2021-08-08
  • React Fiber樹(shù)的構(gòu)建和替換過(guò)程講解

    React Fiber樹(shù)的構(gòu)建和替換過(guò)程講解

    React Fiber樹(shù)的創(chuàng)建和替換過(guò)程運(yùn)用了雙緩存技術(shù),直接將舊的 fiber 樹(shù)替換成新的 fiber 樹(shù),這樣做的好處是省去了直接在頁(yè)面上渲染時(shí)的計(jì)算時(shí)間,避免計(jì)算量大導(dǎo)致的白屏、卡頓,現(xiàn)在你一定還不太理解,下面進(jìn)行詳細(xì)講解,需要的朋友可以參考下
    2022-12-12

最新評(píng)論