」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 掌握複合元件:建構靈活且可重複使用的 React 元件

掌握複合元件:建構靈活且可重複使用的 React 元件

發佈於2024-11-17
瀏覽:899

介紹

React 世界中非常有用且全面的東西是它的設計模式,因為它們有助於保持程式碼的可擴展性並為我們創建的元件添加意義。

有多種模式,在本文中我們將討論複合組件,這是一種高級模式,對於創建靈活的複合介面特別有用。

什麼是複合組件?

複合元件是 React 中的一種高階模式。它的目的是創建更靈活的設計,允許在一組組件之間共享狀態和邏輯,其中父組件和子組件之間的通信必須以靈活的方式完成。

元件必須協同工作來執行某些行為,而不會創建令人尷尬的屬性樹或過於複雜而無法在將來重構或理解的邏輯。

這種模式幫助我們消除道具燃燒,我們必須在組件之間傳遞道具樹。這種道具注入是一個問題,因為它可能會導致每個更新的狀態進行多次不必要的重新渲染,因為每個狀態都會更新所有子元件。

我們在 HTML 中的 select 和 option 標籤結構中有一個複合組件的範例:

Dominando Compound Components: Construindo Componentes React Flexíveis e Reutilizáveis

選擇作為介面狀態管理器,而選項則根據選擇的工作方式進行配置。

使用複合組件的範例

在此範例中,我們將建立一個 Modal,它分為兩個複合元件:Toggle 和 Content。他們將在其中共享開啟和關閉模式的狀態。

讓我們看看一步步創建這個元件會是什麼樣子:

我們可以從建立負責管理開啟和關閉模式狀態的上下文開始

Dominando Compound Components: Construindo Componentes React Flexíveis e Reutilizáveis

創建模態組件的基礎

Dominando Compound Components: Construindo Componentes React Flexíveis e Reutilizáveis

請注意,我們正在使用子元件,為了取得將插入模態的元件,我們將像這樣使用它:

Dominando Compound Components: Construindo Componentes React Flexíveis e Reutilizáveis

現在我們需要建立切換元件,它將負責開啟模態

Dominando Compound Components: Construindo Componentes React Flexíveis e Reutilizáveis

我們還需要負責顯示 Modal 內容的內容元件

Dominando Compound Components: Construindo Componentes React Flexíveis e Reutilizáveis

最後,我們可以將兩者分配給我們的 Modal 元件,就是這樣(:

Dominando Compound Components: Construindo Componentes React Flexíveis e Reutilizáveis

使用

Dominando Compound Components: Construindo Componentes React Flexíveis e Reutilizáveis

結果

Dominando Compound Components: Construindo Componentes React Flexíveis e Reutilizáveis

透過這種方式,我們讓模態的創建和使用變得極其靈活和可重複使用。 Modal.Toggle 負責啟動模態顯示,而 Modal.Content 必須顯示我們模態的內容。

該框架允許開發人員根據應用程式的特定需求輕鬆自訂模態的行為和內容,使程式碼更乾淨、更有組織。

其他例子

我們也可以在其他上下文中使用複合組件,例如:

手風琴組件:

Dominando Compound Components: Construindo Componentes React Flexíveis e Reutilizáveis

菜單組件:

Dominando Compound Components: Construindo Componentes React Flexíveis e Reutilizáveis

所有這些都是靈活且適應性強的,有利於組件的開發、可擴展性和使用。

結論

我們了解如何在複合組件模式中編寫元件在我們的應用程式中發揮作用,我們也了解如何使用它以及一些適合此模式的範例。

隨意探索並嘗試使用 Compoud Components 建立元件,明智地使用它,看看在您的上下文中應用它是否真的有意義,有時,如果應用得不好,它可能會成為一個障礙。

注意:我在react4noobs上發布了相同的內容,react4noobs是一個旨在對react宇宙中開發人員創建的文章進行分組的存儲庫。值得一看=)。

版本聲明 本文轉載於:https://dev.to/gabrielduete/dominando-compound-components-construindo-componentes-react-flexiveis-e-reutilizaveis-30e?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何在 Internet Explorer 10 中套用灰階濾鏡?
    如何在 Internet Explorer 10 中套用灰階濾鏡?
    在Internet Explorer 10 中應用灰階篩選器Internet Explorer 10 對使用傳統CSS 方法應用灰階篩選器提出了挑戰。與先前版本的 IE 不同,不再支援 DX 濾鏡和前綴灰階濾鏡。 解決方案:SVG Overlay要在 IE10 中對灰階影像進行處理,您可以使用 SV...
    程式設計 發佈於2024-11-17
  • 為什麼 CSS `visibility:hidden` 無法達到懸停效果?
    為什麼 CSS `visibility:hidden` 無法達到懸停效果?
    揭開謎團:為什麼CSS 可見性在懸停時失敗CSS 可見性提供了操作元素可見性的便捷方法,但有時它會偶然發現意想不到的障礙。考慮這樣一個場景,您定義了一個「擾流器」類別來使文字最初不可見,並在滑鼠懸停時顯示它。儘管您有期望,文字仍然頑固地保持在隱藏狀態,無視您的懸停努力。 深入探討原因這種令人困惑的行...
    程式設計 發佈於2024-11-17
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-17
  • 如何使用 jQuery 製作背景顏色動畫?
    如何使用 jQuery 製作背景顏色動畫?
    使用 jQuery 淡化背景顏色引人注目的網站元素通常需要微妙的動畫,例如淡入和淡出。雖然 jQuery 廣泛用於動畫文字內容,但它也可用於動態增強背景顏色。 在 jQuery 中淡入/淡出背景顏色進行操作要使用 jQuery 設定元素的背景顏色,您首先需要合併 jQueryUI 函式庫。整合後,可...
    程式設計 發佈於2024-11-17
  • 開源軟體專案的免費人工智慧程式碼審查
    開源軟體專案的免費人工智慧程式碼審查
    如果您參與開源軟體,您就會知道程式碼審查的重要性。它們不僅僅是捕捉錯誤,還確保程式碼品質、安全性和可維護性,幫助每個貢獻者無縫協作。但讓我們面對現實吧,程式碼審查非常耗時。手動審查每個拉取請求 (PR) 可能會減慢開發速度,尤其是在資源有限的開源專案中。 Bito 的人工智慧程式碼審查代理——一種...
    程式設計 發佈於2024-11-17
  • 是否可以在 PHP 重定向中設定自訂標頭?
    是否可以在 PHP 重定向中設定自訂標頭?
    PHP 重定向中的自訂標頭:不可能的請求使用PHP 重定向到頁面時,您可能會在嘗試通過時遇到挑戰以及帶有重定向的自訂HTTP 標頭。重定向的標準方法涉及使用 header("Location: http://...") 語法。然而,這種方法只為觸發重定向的回應設定標頭,而不是為重...
    程式設計 發佈於2024-11-17
  • 如何用CSS消除影像間距?
    如何用CSS消除影像間距?
    透過 CSS 消除圖像間距在 HTML 中,當連續放置多個圖像時,它們之間會出現一個空格。在某些設計場景中,這可能會造成視覺破壞。雖然有許多解決方法,例如手動換行或 HTML 註釋,但有一個使用 CSS 的優雅解決方案。 要有效刪除圖片之間的空白,請利用以下 CSS 屬性:img { displ...
    程式設計 發佈於2024-11-17
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-11-17
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-11-17
  • 如何在 Keras 中實現自己的損失函數?
    如何在 Keras 中實現自己的損失函數?
    Keras 中的自訂損失函數實作在 Keras 中,可以實現自訂損失函數來滿足特定的訓練要求。其中一個函數是骰子誤差係數,它測量真實標籤和預測標籤之間的重疊。 要在 Keras 中建立自訂損失函數,請依照下列步驟操作:1。實作係數函數骰子誤差係數可以寫成:dice coefficient = (2 ...
    程式設計 發佈於2024-11-17
  • Go如何在沒有傳統機制的情況下實現多型?
    Go如何在沒有傳統機制的情況下實現多型?
    探討Go語言中的多態性在物件導向程式設計中,多態性允許物件根據其類別表現出不同的行為。但在Go中,多態性的概念並不是傳統意義上的實現。讓我們深入探討一下這背後的原因,探討如何在 Go 中實現類似的功能。 為什麼 Go 缺乏傳統的多態性Go 不是傳統的物件導向語言。它採用了不同的方法,使用:組合:由其...
    程式設計 發佈於2024-11-17
  • 如何在Java中正確透過套接字傳輸檔案?
    如何在Java中正確透過套接字傳輸檔案?
    Java 透過套接字傳輸檔案:傳送和接收位元組數組Java 透過套接字傳輸檔案:傳送和接收位元組數組在Java 中,透過套接字傳輸檔案涉及將檔案轉換為位元組數組,透過套接字發送它們,然後在接收端將位元組轉換回檔案。本文解決了 Java 開發人員在實作此文件傳輸功能時遇到的問題。 伺服器端問題byte...
    程式設計 發佈於2024-11-17
  • 如何在 JavaScript 中格式化數字以顯示最少的小數位數?
    如何在 JavaScript 中格式化數字以顯示最少的小數位數?
    在JavaScript 中格式化數字關於在JavaScript 中格式化數字的查詢,您可以利用內建函數toLocaleString() 和minimumFractionDigits選項。 toLocaleString() 方法可讓您根據使用者的區域設定或指定的區域設定格式化數字。透過將minimum...
    程式設計 發佈於2024-11-17
  • 如何在 Go 中將數字轉換為字母?
    如何在 Go 中將數字轉換為字母?
    在Go 中將數字轉換為字母了解了將數字轉換為字母的需要,讓我們探索在Go 中實現這一目標的各種方法.數字到符文的轉換一種簡單的方法是將數字添加到常量'A' - 1,其中每個數字相加代表字母表中的一個字母。例如,加 1 得到“A”,加 2 得到“B”。 func toChar(i in...
    程式設計 發佈於2024-11-17
  • 如何在 PHP 中提取不含副檔名的檔名?
    如何在 PHP 中提取不含副檔名的檔名?
    在PHP 中提取不帶擴展名的文件名使用神奇常數__FILE__ 可以輕鬆獲取PHP 中當前執行腳本的文件名。但是,如果您需要提取不含副檔名的檔案名,例如“.php”後綴,則過程略有不同。 basename() 解決方案:若要使用basename()函數刪除副檔名,您可以:basename(__FIL...
    程式設計 發佈於2024-11-17

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3