
- 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 - useLayoutEffect Hook
新的 Hook `useLayoutEffect` 在 React 18 版本中引入。這個 Hook 可以傳遞到元件的渲染函式中,強制 React 庫考慮頁面的佈局並調整其對間距和溢位等內容的計算。
簡單來說,當我們需要檢查網頁不同元素的外觀並根據發現的內容進行更改時,它非常有用。它執行速度很快,允許在網頁視覺更新之前進行更改。這有助於創造更流暢、更響應迅速的使用者體驗。就其執行時間而言,它類似於 `componentDidMount` 和 `componentDidUpdate` 方法,只是它適用於 React 中的函式元件,而不是類元件。它確保在瀏覽器顯示更新之前進行更改。
語法
useLayoutEffect(setup, deps)
引數
setup − 這是你放置程式碼的地方,這些程式碼會在你的 React 元件新增到網頁時執行。
deps − 依賴項充當我們 setup 程式碼所依賴的元素的清單。它可以是來自元件外部的任何內容,例如資訊、資料或我們在元件內生成的內容。
返回值
它返回 undefined。
如何使用它?
React 中的 `useLayoutEffect` Hook 接受兩個引數。第一個引數是 effect 函式,第二個引數是依賴項陣列。第一個引數 effect 通常是 undefined 或返回一個清理函式。`useLayoutEffect` 函式簽名如下所示:
import React, { useLayoutEffect } from "react"; const App = props => { useLayoutEffect(() => { //Perform an action and either return undefined or clean up function. return () => { //Do clean up here }; }, [dependencies]); };
`useLayoutEffect` Hook 是一個強大的 React 元件,允許我們直接控制渲染時輸入焦點的位置。此功能可用於實現各種使用者互動,從隱藏資訊到建立下拉選單。它允許我們僅用一行程式碼完全自定義幕後發生的事情。
示例
示例 - 簡易使用者輸入應用
此應用包含一個簡單的輸入欄位。當我們輸入時,輸入的值會立即記錄。它使用 `React.useLayoutEffect` 即時捕獲和顯示輸入值,提供與使用者輸入的動態互動。
import React from "react"; function App() { const [value, setValue] = React.useState(""); React.useLayoutEffect(() => { console.log("Input value: ", value); }, [value]); return ( <div> <input type="text" value={value} onChange={(e) => setValue(e.target.value)} /> <p>You typed: {value}</p> </div> ); } export default App;
輸出

示例 - 切換按鈕應用
在此應用中,我們將有一個按鈕來切換線上和離線狀態。當前線上狀態使用 `React.useLayoutEffect` 記錄,並相應地顯示訊息。因此,此應用的程式碼如下:
import React from "react"; function App() { const [isOnline, setOnline] = React.useState(true); React.useLayoutEffect(() => { console.log("Online status: ", isOnline ? "Online" : "Offline"); }, [isOnline]); return ( <div> <h2>{isOnline ? "You are online" : "You are offline"}</h2> <button onClick={() => setOnline(!isOnline)}> Toggle Online Status </button> </div> ); } export default App;
輸出

示例 - 計數器應用
讓我們看看一個使用 `useLayoutEffect` 的簡單計數器應用程式,它在單擊按鈕時遞增計數,並使用 effect hook 在控制檯中列印值。
import React from "react"; function App() { const [count, setCount] = React.useState(0); // Initialize with a number React.useLayoutEffect(() => { console.log(count); }, [count]); return ( <div> <h1>The count is {count} </h1> <button onClick={() => setCount(count + 1)}>Click here</button> </div> ); } export default App;
輸出

此程式碼是一個 React 元件,它使用 `useLayoutEffect` hook 跟蹤 count 狀態的值每當它發生變化時。它在網頁上顯示當前計數,並允許使用者透過單擊按鈕來增加它。
限制
`useLayoutEffect` Hook 只能在元件的頂層或其他自定義 Hook 內使用。它不能在迴圈或條件內使用。如果我們需要在迴圈或條件中使用它,請建立一個單獨的元件並將 effect 放置在那裡。
當我們在開發模式下使用 React 的 Strict Mode 時,React 會執行額外的檢查以確保我們的清理程式碼與我們的 setup 程式碼匹配。如果因此遇到問題,請確保我們的清理程式碼正確撤消了我們的 setup 程式碼所做的操作。
如果我們的 effect 所依賴的任何專案是在我們的元件內生成的 object 或 function,則 effect 的執行頻率可能會高於必要頻率。為了解決這個問題,我們可以刪除不必要的 object 和 function 依賴項。