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

React 中 props.children 的完整指南

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

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]刪除
最新教學 更多>
  • XAMPP(Windows)中的MySQL客戶端的“ .my.cnf”文件在哪裡?
    XAMPP(Windows)中的MySQL客戶端的“ .my.cnf”文件在哪裡?
    在XAMPP(Windows)中為MySQL客戶端確定“ .my.cnf”的位置自動讀取的文件放置,以確保命令行client會自動讀取“ .my.cnf”文件,將其放置在以下位置:手動配置如果您喜歡將“ .my.cnf”文件放在其他位置,則需要使用 - defaults-file選項手動指定其位...
    程式設計 發佈於2025-02-06
  • 如何從PHP服務器發送文件?
    如何從PHP服務器發送文件?
    將文件發送到user
    程式設計 發佈於2025-02-06
  • 在編譯和運行時,如何處理常數的精度?
    在編譯和運行時,如何處理常數的精度?
    如何在常數上執行算術Storage and Representation of ConstantsUntyped constants do not occupy memory at runtime.它們僅在彙編過程中存在,並且不存在於可執行文件中。編譯器從其默認類型中派生非類型常數的類型。例如,在...
    程式設計 發佈於2025-02-06
  • 哪種方法更有效地用於點 - 填點檢測:射線跟踪或matplotlib \的路徑contains_points?
    哪種方法更有效地用於點 - 填點檢測:射線跟踪或matplotlib \的路徑contains_points?
    在Python 射線tracing方法Matplotlib's path.contains_points FunctionMatplotlib's path.contains_points function employs a路徑對象表示多邊形。它檢查給定點是否位於定義路徑內。 T...
    程式設計 發佈於2025-02-06
  • 打印大HTML表時,CSS如何防止行斷裂?
    打印大HTML表時,CSS如何防止行斷裂?
    打印大型html表:CSS方法通過指定Page-Break-inside:auto for 元素,瀏覽器試圖在啟動頁面之前在當前頁面上完成表格休息。此外,設置頁面折線:避免使用元素可以防止行分為跨頁。 保留標題和頁腳可見性,使用page-break-after-fer-fer-fer-fer-fe...
    程式設計 發佈於2025-02-06
  • GO中的緩衝渠道是否可以保證與一個生產者和一個消費者一起有序的數據傳輸?
    GO中的緩衝渠道是否可以保證與一個生產者和一個消費者一起有序的數據傳輸?
    [2從生產者到消費者的數據傳輸? 問題: 答案: 使用緩衝頻道: 也意味著生產者的數據插入順序不一定與消費者檢索數據的數據相同。 相反,無封閉的頻道: 保證遞送順序: 操作順序: send < - >接收 send < - > buffer < - >接收 多個生產者/消費者:在這種情況下,數據傳...
    程式設計 發佈於2025-02-06
  • 默認情況下,如何使PDO拋出異常?
    默認情況下,如何使PDO拋出異常?
    PDO異常處理配置 1。構造函數參數您可以將選項數組傳遞給PDO構造函數,包括錯誤處理模式: 2。 Wrapper ClassAlternatively, you can create a wrapper class that extends PDO and always sets the e...
    程式設計 發佈於2025-02-06
  • 如何使用組在MySQL中旋轉數據?
    如何使用組在MySQL中旋轉數據?
    在關係數據庫中使用mysql組使用mysql組來調整查詢結果。在這裡,我們面對一個共同的挑戰:使用組的組將數據從基於行的基於列的基於列的轉換。通過子句以及條件匯總函數,例如總和或情況。讓我們考慮以下查詢: select d.data_timestamp, sum(data_id = 1 tata...
    程式設計 發佈於2025-02-06
  • 如何使用Python的記錄模塊實現自定義處理?
    如何使用Python的記錄模塊實現自定義處理?
    使用Python的Loggging Module 確保正確處理和登錄對於疑慮和維護的穩定性至關重要Python應用程序。儘管手動捕獲和記錄異常是一種可行的方法,但它可能乏味且容易出錯。 解決此問題,Python允許您覆蓋默認的異常處理機制,並將其重定向為登錄模塊。這提供了一種方便而係統的方法來捕獲...
    程式設計 發佈於2025-02-06
  • Java Shift Operators:`>'vs.`>>' - 有什麼區別?
    Java Shift Operators:`>'vs.`>>' - 有什麼區別?
    >`vs.`>>>` - 有什麼區別? “ />>`vs.`>>>` - 有什麼區別? “ />
    程式設計 發佈於2025-02-06
  • 在映射到MySQL枚舉列時,如何確保冬眠保留值?
    在映射到MySQL枚舉列時,如何確保冬眠保留值?
    在hibernate中保存枚舉值:故障排除錯誤的列type ,他們各自的映射至關重要。在Java中使用枚舉類型時,至關重要的是,建立冬眠的方式如何映射到基礎數據庫。 在您的情況下,您已將MySQL列定義為枚舉,並在Java中創建了相應的枚舉代碼。但是,您遇到以下錯誤:“ MyApp中的錯誤列類型...
    程式設計 發佈於2025-02-06
  • 如何干淨地刪除匿名JavaScript事件處理程序?
    如何干淨地刪除匿名JavaScript事件處理程序?
    在這里工作/},false); 不幸的是,答案是否。除非在Creation中存儲對處理程序的引用。 要解決此問題,請考慮將事件處理程序存儲在中心位置,例如頁面的主要對象,請考慮將事件處理程序存儲在中心位置,否則無法清理匿名事件處理程序。 。這允許在需要時輕鬆迭代和清潔處理程序。
    程式設計 發佈於2025-02-06
  • 如何從PHP中的UTF-8字符中提取UCS-2代碼點?
    如何從PHP中的UTF-8字符中提取UCS-2代碼點?
    [2對於給定的UTF-8字符串中的字符。為此,可以定義自定義的PHP函數。 首先,了解UTF-8編碼方案很重要。每個字符由1到4個字節的序列表示,具體取決於其Unicode代碼點。每個字節大小的範圍如下: 0xxxxx:1 byte 110xxxxxxxxxx:2 bytes 11110:4字節...
    程式設計 發佈於2025-02-06
  • 如何正確管理Firebase ValueEventListeners以優化應用程序性能?
    如何正確管理Firebase ValueEventListeners以優化應用程序性能?
    在firebase 在單獨的線程上運行firebase valueeventlistener,從而引發了有關線程管理的關注點。為了確保有效的資源利用,應根據應用程序的生命週期進行適當時刪除valueEventListeners。 何時刪除valueEventListeners 作為一般規則,您應在...
    程式設計 發佈於2025-02-06
  • 在Windows上運行Python腳本時,如何隱藏控制台窗口?
    在Windows上運行Python腳本時,如何隱藏控制台窗口?
    在python 在Python中編寫IRC機器人時會出現這樣的方案,在該機器人的功能中應在沒有可見的控制器的情況下運行。為此,您可以使用以下簡單但有效的技術:解決方案,您可以通過使用一個用一個腳本保存python腳本來抑制控制台窗口“ .pyw”擴展。 示例此模式打開控制台窗口,允許訪問程序的輸出...
    程式設計 發佈於2025-02-06

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

Copyright© 2022 湘ICP备2022001581号-3