【React】插槽渲染機制

目錄

  • 通過 children 屬性結合條件渲染
  • 通過 children 和 slot 屬性實現具名插槽
  • 通過 props 實現具名插槽

在 React 中,并沒有直接類似于 Vue 中的“插槽”機制(slot)。但是,React 可以通過 propschildren 來實現類似插槽的功能,允許你將組件的內容進行靈活插入和替換。

通過 children 屬性結合條件渲染

通過 children 來傳遞任意數量的子元素,然后在組件內部通過位置進行條件渲染,從而實現插槽功能。

Layout 組件通過 children 渲染傳遞給它的所有子元素,而這些子元素可以是任何內容,類似于 Vue 中的默認插槽。雖然在某些情況下,children 已經是一個數組(例如多個子元素的情況),但 React.Children.toArray 會確保你始終獲得一個標準化的數組(過濾掉null、undefined等數據)。

//子組件
const Layout = ({ children }) => {children = React.Children.toArray(children);console.log(children,'children')return (<div className="layout"><header>Header</header><main>{children}</main> {/* 這里的 children 就是父組件傳遞進來的內容 */}<footer>Footer</footer></div>);
}; 
//父組件
const App = () => {return (<Layout><h1>Hello, React!</h1><p>This is the main content of the page.</p></Layout>);
};

打印出children,就是父組件標簽里內容編譯成的virtualDOM。

在這里插入圖片描述

通過 children 和 slot 屬性實現具名插槽

在標簽上加slot來標記標簽

//父組件
root.render(<><DemoOne title="REACT好好玩哦" x={10}><span slot="footer">我是頁腳</span><span>哈哈哈哈</span><span slot="header">我是頁眉</span></DemoOne></>
); 

子組件根據children屬性中的slot來區分插槽

//子組件
const DemoOne = function DemoOne(props) {let { title, x, children } = props;children = React.Children.toArray(children);let headerSlot = [],footerSlot = [],defaultSlot = [];children.forEach(child => {// 傳遞進來的插槽信息,都是編譯為virtualDOM后傳遞進來的「而不是傳遞的標簽」let { slot } = child.props;if (slot === 'header') {headerSlot.push(child);} else if (slot === 'footer') {footerSlot.push(child);} else {defaultSlot.push(child);}});return <div className="demo-box">{headerSlot}<br /><h2 className="title">{title}</h2><span>{x}</span><br />{footerSlot}</div>;
};

通過 props 實現具名插槽

顯式傳遞 props 來模擬具名插槽,傳遞不同的內容到特定的插槽位置

const DemoOne = ({ title, x, children, footer, header }) => {return (<div className="demo-box"><h1>{title}</h1><div>{header}</div> {/* 渲染具名插槽 header */}<div>{children}</div> {/* 渲染默認插槽 */}<div>{footer}</div> {/* 渲染具名插槽 footer */}</div>);
};const App = () => {return (<DemoOne title="REACT好好玩哦" x={10} footer={<span>我是頁腳</span>} header={<span>我是頁眉</span>}><span>哈哈哈哈</span></DemoOne>);
};

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/66243.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66243.shtml
英文地址,請注明出處:http://en.pswp.cn/web/66243.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Go】Go Gorm 詳解

1. 概念 Gorm 官網&#xff1a;https://gorm.io/zh_CN/docs/ Gorm&#xff1a;The fantastic ORM library for Golang aims to be developer friendly&#xff0c;這是官網的介紹&#xff0c;簡單來說 Gorm 就是一款高性能的 Golang ORM 庫&#xff0c;便于開發人員提高效率 那…

【MySQL實戰】mysql_exporter+Prometheus+Grafana

要在Prometheus和Grafana中監控MySQL數據庫&#xff0c;如下圖&#xff1a; 可以使用mysql_exporter。 以下是一些步驟來設置和配置這個監控環境&#xff1a; 1. 安裝和配置Prometheus&#xff1a; - 下載和安裝Prometheus。 - 在prometheus.yml中配置MySQL通過添加以下內…

【Apache Doris】周FAQ集錦:第 29 期

引言 歡迎查閱本周的 Apache Doris 社區 FAQ 欄目&#xff01; 在這個欄目中&#xff0c;每周將篩選社區反饋的熱門問題和話題&#xff0c;重點回答并進行深入探討。旨在為廣大用戶和開發者分享有關 Apache Doris 的常見問題。 通過這個每周 FAQ 欄目&#xff0c;希望幫助社…

Linux:文件描述符fd、系統調用open

目錄 一、文件基礎認識 二、C語言操作文件的接口 1.> 和 >> 2.理解“當前路徑” 三、相關系統調用 1.open 2.文件描述符 3.一切皆文件 4.再次理解重定向 一、文件基礎認識 文件 內容 屬性。換句話說&#xff0c;如果在電腦上新建了一個空白文檔&#xff0…

鴻蒙動態路由實現方案

背景 隨著CSDN 鴻蒙APP 業務功能的增加&#xff0c;以及為了與iOS、Android 端統一頁面跳轉路由&#xff0c;以及動態下發路由鏈接&#xff0c;路由重定向等功能。鴻蒙動態路由方案的實現迫在眉睫。 實現方案 鴻蒙版本動態路由的實現原理&#xff0c;類似于 iOS與Android的實…

計算機網絡 (42)遠程終端協議TELNET

前言 Telnet&#xff08;Telecommunication Network Protocol&#xff09;是一種網絡協議&#xff0c;屬于TCP/IP協議族&#xff0c;主要用于提供遠程登錄服務。 一、概述 Telnet協議是一種遠程終端協議&#xff0c;它允許用戶通過終端仿真器連接到遠程主機&#xff0c;并在遠程…

汽車網絡信息安全-ISO/SAE 21434解析(上)

目錄 概述 第四章-概述 1. 研究對象和范圍 2. 風險管理 第五章-組織級網絡安全管理 1. 網絡安全治理&#xff08;cybersecurity governance&#xff09; 2. 網絡安全文化&#xff08;cybersecurity culture) 3. 信息共享&#xff08;Information Sharing) 4. 管理體系…

【0393】Postgres內核 checkpointer process ③ 構建 WAL records 工作緩存區

1. 初始化 ThisTimeLineID、RedoRecPtr 函數 InitXLOGAccess() 內部會初始化 ThisTimeLineID、wal_segment_size、doPageWrites 和 RedoRecPtr 等全局變量。 下面是這四個變量初始化前的值: (gdb) p ThisTimeLineID $125 = 0 (gdb) p wal_segment_size $126 = 16777216 (gdb…

cursor+deepseek構建自己的AI編程助手

文章目錄 準備工作在Cursor中添加deepseek 準備工作 下載安裝Cursor &#xff08;默認安裝在C盤&#xff09; 注冊deepseek獲取API key 在Cursor中添加deepseek 1、打開cursor&#xff0c;選擇設置 選擇Model&#xff0c;添加deepseek-chat 注意這里去掉其他的勾選項&…

微調神經機器翻譯模型全流程

MBART: Multilingual Denoising Pre-training for Neural Machine Translation 模型下載 mBART 是一個基于序列到序列的去噪自編碼器&#xff0c;使用 BART 目標在多種語言的大規模單語語料庫上進行預訓練。mBART 是首批通過去噪完整文本在多種語言上預訓練序列到序列模型的方…

潯川社團官方文章被 Devpress 社區收錄!

潯川社團官方文章被 Devpress 社區收錄&#xff01; 親愛的潯川社團成員們以及關注我們的朋友們&#xff1a; 在這個充滿活力與機遇的社團發展歷程中&#xff0c;我們迎來了一則令人振奮的喜訊&#xff01;潯川社團精心創作的官方文章&#xff0c;成功被 Devpress 社區收錄啦&a…

STM32網絡通訊之CubeMX實現LWIP項目設計(十五)

STM32F407 系列文章 - ETH-LWIP-CubeMX&#xff08;十五&#xff09; 目錄 前言 一、軟件設計 二、CubeMX實現 1.配置前準備 2.CubeMX配置 1.ETH模塊配置 2.時鐘模塊配置 3.中斷模塊配置 4.RCC及SYS配置 5.LWIP模塊配置 3.生成代碼 1.main文件 2.用戶層源文件 3.…

簡單組合邏輯

多路選擇器 在多路數據傳輸過程中&#xff0c;能夠將任意一路選出來的電路叫做數據選擇器&#xff0c;也稱多路選擇器。對于一個具有2^n個輸入和一個輸出的多路選擇器&#xff0c;有n個選擇變量&#xff0c;多路選擇器也是FPGA內部的一個基本資源&#xff0c;主要用于內部信號的…

【Unity-Game4Automation PRO 插件】

Game4Automation PRO 插件 是一個用于 Unity 引擎 的工業自動化仿真工具&#xff0c;它提供了對工業自動化領域的仿真和虛擬調試支持&#xff0c;特別是在與工業機器人、生產線、PLC 系統的集成方面。該插件旨在將工業自動化的實時仿真與游戲開發的高質量 3D 可視化能力結合起來…

【安卓開發】【Android】總結:安卓技能樹

【持續更新】 對筆者在安卓開發的實踐中認為必要的知識點和遇到的問題進行總結。 一、基礎知識部分 1、Android Studio軟件使用 軟件界面 最新的版本是瓢蟲&#xff08;Ladybug&#xff09;&#xff0c;bug的確挺多。筆者更習慣使用電鰻&#xff08;Electric Eel&#xff0…

鴻蒙打包發布

HarmonyOS應用/元服務發布&#xff08;打包發布&#xff09; https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/ide-publish-app-V13?catalogVersionV13 密鑰&#xff1a;包含非對稱加密中使用的公鑰和私鑰&#xff0c;存儲在密鑰庫文件中&#xff0c;格式…

Spring Boot 下的Swagger 3.0 與 Swagger 2.0 的詳細對比

先說結論&#xff1a; Swgger 3.0 與Swagger 2.0 區別很大&#xff0c;Swagger3.0用了最新的注釋實現更強大的功能&#xff0c;同時使得代碼更優雅。 就個人而言&#xff0c;如果新項目推薦使用Swgger 3.0&#xff0c;對于工具而言新的一定比舊的好&#xff1b;對接于舊項目原…

神經網絡基礎-價格分類案例

文章目錄 1. 需求分析2. 導入所需工具包3. 構建數據集4. 構建分類網絡模型5. 訓練模型6. 模型訓練7. 評估模型8. 模型優化 學習目標&#xff1a; 掌握構建分類模型流程動手實踐整個過程 1. 需求分析 小明創辦了一家手機公司&#xff0c;他不知道如何估算手機產品的價格。為了…

SAP 固定資產常用的數據表有哪些,他們是怎么記錄數據的?

在SAP系統中&#xff0c;固定資產管理&#xff08;FI-AA&#xff09;涉及多個核心數據表&#xff0c;用于記錄資產主數據、折舊、交易等。以下是常用的數據表及其記錄數據的邏輯&#xff1a; 1. ANKT - 資產主數據表 功能&#xff1a;存儲資產主數據的文本描述。 字段&#x…

光伏儲能電解水制氫仿真模型Matlab/Simulink

今天更新的內容為光伏儲能制氫技術&#xff0c;這個方向我之前在21年就系統研究并發表過相關文章&#xff0c;經過這幾年的發展&#xff0c;綠色制氫技術也受到更多高校的注意&#xff0c;本篇博客也是在原先文章的基礎上進行更新。 首先讓大家熟悉一下綠氫制取技術這個概念&a…