
- ReactJS 教程
- ReactJS - 首頁
- ReactJS - 簡介
- ReactJS - 路線圖
- ReactJS - 安裝
- ReactJS - 特性
- ReactJS - 優勢與劣勢
- ReactJS - 架構
- ReactJS - 建立 React 應用
- ReactJS - JSX
- ReactJS - 元件
- ReactJS - 巢狀元件
- ReactJS - 使用新建立的元件
- ReactJS - 元件集合
- ReactJS - 樣式
- ReactJS - 屬性 (props)
- ReactJS - 使用屬性建立元件
- ReactJS - props 驗證
- ReactJS - 建構函式
- ReactJS - 元件生命週期
- ReactJS - 事件管理
- ReactJS - 建立一個事件感知元件
- ReactJS - 在 Expense Manager 應用中引入事件
- ReactJS - 狀態管理
- ReactJS - 狀態管理 API
- ReactJS - 無狀態元件
- ReactJS - 使用 React Hooks 進行狀態管理
- ReactJS - 使用 React Hooks 的元件生命週期
- ReactJS - 佈局元件
- ReactJS - 分頁
- ReactJS - Material UI
- ReactJS - Http 客戶端程式設計
- ReactJS - 表單程式設計
- ReactJS - 受控元件
- ReactJS - 非受控元件
- ReactJS - Formik
- ReactJS - 條件渲染
- ReactJS - 列表
- ReactJS - Keys
- ReactJS - 路由
- ReactJS - Redux
- ReactJS - 動畫
- ReactJS - Bootstrap
- ReactJS - Map
- ReactJS - 表格
- ReactJS - 使用 Flux 管理狀態
- ReactJS - 測試
- ReactJS - CLI 命令
- ReactJS - 構建和部署
- ReactJS - 示例
- Hooks
- ReactJS - Hooks 簡介
- ReactJS - 使用 useState
- ReactJS - 使用 useEffect
- ReactJS - 使用 useContext
- ReactJS - 使用 useRef
- ReactJS - 使用 useReducer
- ReactJS - 使用 useCallback
- ReactJS - 使用 useMemo
- ReactJS - 自定義 Hooks
- ReactJS 高階
- ReactJS - 可訪問性
- ReactJS - 程式碼分割
- ReactJS - Context
- ReactJS - 錯誤邊界
- ReactJS - 轉發 Refs
- ReactJS - Fragments
- ReactJS - 高階元件
- ReactJS - 與其他庫整合
- ReactJS - 效能最佳化
- ReactJS - Profiler API
- ReactJS - Portals
- ReactJS - 無 ES6 ECMAScript 的 React
- ReactJS - 無 JSX 的 React
- ReactJS - 調和
- ReactJS - Refs 和 DOM
- ReactJS - Render Props
- ReactJS - 靜態型別檢查
- ReactJS - Strict Mode
- ReactJS - Web Components
- 其他概念
- ReactJS - 日期選擇器
- ReactJS - Helmet
- ReactJS - 內聯樣式
- ReactJS - PropTypes
- ReactJS - BrowserRouter
- ReactJS - DOM
- ReactJS - 輪播圖
- ReactJS - 圖示
- ReactJS - 表單元件
- ReactJS - 參考 API
- ReactJS 有用資源
- ReactJS - 快速指南
- ReactJS - 有用資源
- ReactJS - 討論
ReactJS - 元件佈局
React 的一個高階特性是允許使用屬性將任意使用者介面 (UI) 內容傳遞到元件中。與 React 的特殊 children 屬性相比,後者只允許將單個使用者介面內容傳遞到元件中,此選項允許將多個 UI 內容傳遞到元件中。此選項可以看作是 children 屬性的擴充套件。此選項的用例之一是佈局元件的使用者介面。
例如,具有可自定義頁首和頁尾的元件可以使用此選項透過屬性獲取自定義頁首和頁尾並佈局內容。
示例
下面是一個帶有兩個屬性 header 和 footer 的快速簡單的示例
<Layout header={<h1>Header</h1>} footer={<p>footer</p>} />
佈局渲染邏輯如下:
return (<div> <div> {props.header} </div> <div> Component user interface </div> <div> {props.footer} </div> </div>)
讓我們向我們的支出條目列表 (ExpenseEntryItemList) 元件新增一個簡單的頁首和頁尾。
在您喜歡的編輯器中開啟 expense-manager 應用程式。
接下來,開啟 src/components 資料夾中的 ExpenseEntryItemList.js 檔案。
接下來,在 render() 方法中使用 header 和 footer props。
return ( <div> <div>{this.props.header}</div> ... existing code ... <div>{this.props.footer}</div> </div> );
接下來,開啟 index.js 並使用 ExpenseEntryItemList 元件時包含 header 和 footer 屬性。
ReactDOM.render( <React.StrictMode> <ExpenseEntryItemList items={items} header={ <div><h1>Expense manager</h1></div> } footer={ <div style={{ textAlign: "left" }}> <p style={{ fontSize: 12 }}>Sample application</p> </div> } /> </React.StrictMode>, document.getElementById('root') );
接下來,使用 npm 命令啟動應用程式。
npm start
接下來,開啟瀏覽器並在位址列中輸入 https://:3000 並按 Enter 鍵。

在元件中共享邏輯,又名 Render props
Render props 是用於在 React 元件之間共享邏輯的高階概念。正如我們之前瞭解到的,元件可以透過屬性接收任意 UI 內容或 React 元素(物件)。通常,元件會按原樣渲染它接收到的 React 元素以及它自己的使用者介面,就像我們在 children 和佈局概念中看到的那樣。它們之間不共享任何邏輯。
更進一步,React 允許元件透過屬性獲取一個返回使用者介面而不是普通使用者介面物件的函式。該函式的唯一目的是渲染 UI。然後,元件將進行高階計算,並將呼叫傳入的函式以及計算值來渲染 UI。
簡而言之,接收一個渲染使用者介面的 JavaScript 函式作為屬性的元件稱為 Render Props。接收 Render Props 的元件將執行高階邏輯並將其與 Render Props 共享,後者將使用共享的邏輯渲染使用者介面。
許多高階第三方庫都基於 Render Props。一些使用 Render Props 的庫包括:
- React Router
- Formik
- Downshift
例如,Formik 庫元件將執行表單驗證和提交,並將表單設計傳遞給呼叫函式,即 Render Props。類似地,React Router 執行路由邏輯,同時使用 Render Props 將 UI 設計委派給其他元件。