」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > React 中 props.children 的完整指南

React 中 props.children 的完整指南

發佈於2024-07-31
瀏覽:196

A Complete Guide To props.children In React

我使用 React 開發了幾個月,但沒有完全理解 React 元件模型的真正威力。有一天,我決定深入研究作曲,這就是我學到的。

React 元件和子元件

在 React 中,一個元件可以有一個、多個子元件,也可以沒有子元件。很好,但是等等 —— 什麼是「孩子」?我們用一個例子來解釋:

設定檔元件有兩個子元件:ProfileImage 和 ProfileDetails,而這兩個沒有子元件

「在同時包含開始標籤和結束標籤的 JSX 表達式中,這些標籤之間的內容作為特殊 props 傳遞:props.children」 — React 文件

本質上,props.children是一個特殊的prop,自動傳遞給每個元件,可用於在呼叫元件時渲染開始和結束標記之間包含的內容。這些類型的元件被官方文件標識為“boxes”。

透過 JSX 語法識別組件

在 React 的 JSX 中,具有子元件的元件始終由開始標籤和結束標籤來識別。每個子項都必須放置在這兩個標籤之間,就像我們在上面看到的那樣。當元件沒有子元件時,您可以使用 呼叫它,但通常首選後一種語法。自閉合標籤的目的是使程式碼更短且更易於閱讀。

操作中的 props.children

假設我們要建立一個 ImageSlider 元件。我們的目標是像這樣呼叫元件:

React 中 props.children 的完整指南React 中 props.children 的完整指南React 中 props.children 的完整指南

可以看到,ImageSlider是由多個React 中 props.children 的完整指南組成,可以透過props.children來存取和渲染。

export default function ImageSlider(props) { 
    return (
      
{props.children}
); }

感謝 props.children 我們可以將內容嵌套在元件中,就像嵌套常見的 HTML 元素一樣.

props.children 允許使用哪些類型的內容?

透過 props.children 傳遞給元件的內容可以包括

undefined、null、布林值、數字、字串、React 元素或任何這些類型的遞歸數組。它也可以是傳回這些類型之一的函數。

請注意,如 React 文件中所提到的, false、null、undefined 和 true 是有效的子項,但它們將被忽略並且不會渲染。如果想要渲染 false、true、null 或 undefined,則必須先將其轉換為字串:


  { String(undefined) }

為什麼 props.children 如此重要?

props.children 讓我們組合元件,從而組合我們的前端介面;利用 React 元件模型的真正力量。

「React 擁有強大的組合模型,我們建議使用組合而不是繼承以在元件之間重複使用程式碼。」 — React 文件

如官方文件所述,有時您可能需要填充元件中的多個「漏洞」。在這種情況下,定義多個自訂 props 可能是更好的方法,而不是使用 props.children;如下例所示:

function SplitPane(props) {
  const { left, right } = props

  return (
    
{ left }
{ right }
); }

React.Children

「React.Children 提供了處理 props.children 不透明資料結構的實用程式」 — React 文件

為什麼 props.children 是一個「不透明的資料結構」?

因為props.children 可以由一個、多個或沒有子元素組成,這意味著它的值可以是單一子節點,子節點數組,或 未定義分別。感謝 React.Children API,我們可以輕鬆處理 props.children,而無需考慮其每種可能的類型。值得慶幸的是,一切都會在後台為我們處理。

在撰寫本文時,React.Children 提供了五種不同的實用程式

  • 地圖

  • forEach

  • 數數

  • 僅有的

  • toArray

讓我們透過一個例子來看看如何使用 React.Children。假設我們想要將特殊的 CSS 類別 img-special-class 加入到 ImageSlider 元件的每個子元件中。這可以如下完成:

export default function ImageSlider(props) {
  const { children } = props

  return (
    
{ React.Children.map(children, (child) => React.cloneElement(child, { className: `${child.props.className} img-special-class` }) ) }
); }

React.Children.map 讓我們迭代 props.children 並根據作為第二個參數傳遞的函數轉換每個元素。為了實現我們的目標,我們使用了 React.cloneElement。這是因為我們需要更改 className prop 的值,但是 props 在 React 中是不可變的,因此我們必須複製每個子級。

結論

掌握 props.children 對於成為優秀的 React 開發人員並開始充分利用 React 元件模型的潛力至關重要。 props.children 是 React 最有用的功能之一,因為它使我們能夠渲染子元件。正因為如此,每個開發者都應該知道如何正確使用它。

我希望這篇文章能幫助你掌握 React 中的組合。


貼文「A Complete Guide To props.children In React」首先出現在 Writech 上。

版本聲明 本文轉載於:https://dev.to/writech/a-complete-guide-to-propschildren-in-react-196k?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何在沒有圖像的 Outlook 電子郵件中建立圓角?
    如何在沒有圖像的 Outlook 電子郵件中建立圓角?
    在沒有圖像的 Outlook 中設定圓角樣式使用 CSS 在電子郵件用戶端中建立圓角可以非常簡單。但是,使用 CSS border-radius 屬性的傳統方法在 Microsoft Outlook 中不起作用。在設計具有圓角元素的電子郵件時,此限制提出了挑戰。 不用擔心,有一個解決方案可以讓您在 ...
    程式設計 發佈於2024-11-06
  • 如何在Python中高效比較字典中相等的鍵值對?
    如何在Python中高效比較字典中相等的鍵值對?
    比較字典是否相等的鍵值對在Python中,比較字典以檢查鍵值對是否相等是一項常見任務。一種方法是迭代字典並使用 zip 和 iteritems 方法比較每一對字典。然而,還有一些替代方法可以提供更好的程式碼優雅性。 其中一種方法是使用字典理解來建立僅包含共享鍵值對的新字典。代碼如下:shared_i...
    程式設計 發佈於2024-11-06
  • 如何在 PHP 中使用數組函數向左旋轉數組元素?
    如何在 PHP 中使用數組函數向左旋轉數組元素?
    在PHP 中向左旋轉數組元素在PHP 中旋轉數組,將第一個元素移動到最後一個元素並重新索引數組,可以使用PHP 的array_push() 和array_shift() 函數組合來實現。 PHP 函數:PHP 沒有專門用於旋轉的內建函數數組。但是,以下程式碼片段示範如何模擬所需的旋轉行為:$numb...
    程式設計 發佈於2024-11-06
  • 如何解決Java存取檔案時出現「系統找不到指定的路徑」錯誤?
    如何解決Java存取檔案時出現「系統找不到指定的路徑」錯誤?
    解決Java 中遇到「系統找不到指定的路徑」時的檔案路徑問題在Java 專案中,嘗試存取文字時遇到錯誤來自指定相對路徑的檔案。此錯誤是由於 java.io.File 類別無法定位指定路徑而產生的。 要解決此問題,建議從類別路徑中檢索文件,而不是依賴文件系統。透過這樣做,您可以消除相對路徑的需要,並確...
    程式設計 發佈於2024-11-06
  • Laravel 中的 defer() 函數如何運作?
    Laravel 中的 defer() 函數如何運作?
    Taylor Otwell 最近宣布了 Laravel 中的新函數 defer()。這只是對 defer() 函數如何運作以及使用它可能遇到的問題進行非常基本的概述。 找出問題 還記得您曾經需要從 API 獲取某些內容,然後在幕後執行一些用戶不關心但仍在等待的操作的路由嗎?是的,我們都至少經歷過一...
    程式設計 發佈於2024-11-06
  • 在 Python Notebook 中探索使用 PySpark、Pandas、DuckDB、Polars 和 DataFusion 的資料操作
    在 Python Notebook 中探索使用 PySpark、Pandas、DuckDB、Polars 和 DataFusion 的資料操作
    Apache Iceberg Crash Course: What is a Data Lakehouse and a Table Format? Free Copy of Apache Iceberg the Definitive Guide Free Apache Iceberg Crash ...
    程式設計 發佈於2024-11-06
  • Vue + Tailwind 和動態類
    Vue + Tailwind 和動態類
    我最近在做的一個專案使用了Vite、Vue和Tailwind。 使用自訂顏色一段時間後,我遇到了一些困惑。 在模板中添加和使用自訂顏色不是問題 - 使用 Tailwind 文件使該過程非常清晰 // tailwind.config.js module.exports = { theme:...
    程式設計 發佈於2024-11-06
  • 端對端(E 測試:綜合指南
    端對端(E 測試:綜合指南
    端到端测试简介 端到端(E2E)测试是软件开发生命周期的重要组成部分,确保整个应用程序流程从开始到结束都按预期运行。与专注于单个组件或几个模块之间交互的单元或集成测试不同,端到端测试从用户的角度验证整个系统。这种方法有助于识别应用程序不同部分交互时可能出现的任何问题,确保无缝且无错误的用户体验。 ...
    程式設計 發佈於2024-11-06
  • 可以在 Go 結構標籤中使用變數嗎?
    可以在 Go 結構標籤中使用變數嗎?
    在Go 結構體標籤中嵌入變數Go 的結構體標籤通常用於註釋和元數據,通常涉及簡單的字符串文字。但是,使用者可能會遇到在這些標籤中需要動態或計算值的情況。 考慮以下結構,其中帶有為 JSON 封送註解的「類型」欄位:type Shape struct { Type string `json:&...
    程式設計 發佈於2024-11-06
  • 如何增強 Visual Studio 的建置詳細程度以實現深入洞察?
    如何增強 Visual Studio 的建置詳細程度以實現深入洞察?
    熟悉 Visual Studio 的建造詳細程度需要全面了解 Visual Studio 建置過程背後的複雜細節?別再猶豫了! 雖然使用 vcbuild 不會產生所需的詳細輸出,但 Visual Studio 的設定中隱藏著一個解決方案。採取以下簡單步驟即可解鎖大量資訊:導覽至 Visual Stu...
    程式設計 發佈於2024-11-06
  • 開發者日記# 誰寫的?
    開發者日記# 誰寫的?
    有個想法困擾著我。也許,我們無法識別它,但日復一日,我們周圍越來越多的人工智慧生成的內容。 LinkedIn 或其他平台上的有趣圖片、影片或貼文。我對帖子的媒體內容沒有疑問(很容易識別它何時生成、從庫存中獲取或創建),但我對帖子的內容表示懷疑。幾乎每次我讀一篇文章時,我都會想這是誰寫的?是作者分享了...
    程式設計 發佈於2024-11-06
  • 哪一種方法計算資料庫行數較快:PDO::rowCount 或 COUNT(*)?
    哪一種方法計算資料庫行數較快:PDO::rowCount 或 COUNT(*)?
    PDO::rowCount 與COUNT(*) 效能在資料庫查詢中計算行數時,選擇使用PDO:: rowCount 和COUNT(*) 會顯著影響效能。 PDO::rowCountPDO::rowCount 傳回受最後一個 SQL 語句影響的行數。但是,對於 SELECT 語句,某些資料庫可能會傳回...
    程式設計 發佈於2024-11-06
  • PART# 使用 HTTP 進行大型資料集的高效能檔案傳輸系統
    PART# 使用 HTTP 進行大型資料集的高效能檔案傳輸系統
    让我们分解提供的HTML、PHP、JavaScript和CSS代码对于分块文件上传仪表板部分。 HTML 代码: 结构概述: Bootstrap for Layout:代码使用 Bootstrap 4.5.2 创建一个包含两个主要部分的响应式布局: 分块上传部分:用于...
    程式設計 發佈於2024-11-06
  • 比較:Lithe 與其他 PHP 框架
    比較:Lithe 與其他 PHP 框架
    如果您正在為下一個專案探索 PHP 框架,很自然會遇到 Laravel、Symfony 和 Slim 等選項。但是,是什麼讓 Lithe 與這些更強大、更知名的框架區分開來呢?以下是一些突出 Lithe 如何脫穎而出的注意事項。 1. 輕量級與性能 Lithe 的設計重點在於輕量級...
    程式設計 發佈於2024-11-06
  • 程式設計風格指南:編寫簡潔程式碼的實用指南
    程式設計風格指南:編寫簡潔程式碼的實用指南
    在过去的五年里,我一直在不断尝试提高我的编码技能,其中之一就是学习和遵循最推荐的编码风格。 本指南旨在帮助您编写一致且优雅的代码,并包含一些提高代码可读性和可维护性的建议。它的灵感来自于社区中最受接受的流行指南,但进行了一些修改以更适合我的喜好。 值得一提的是,我是一名全栈 JavaScript 开...
    程式設計 發佈於2024-11-06

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

Copyright© 2022 湘ICP备2022001581号-3