React 是一個 JavaScript 函式庫,它允許我們以宣告方式建立使用者介面。 React 的關鍵概念之一是我們如何管理元件的生命週期。在本文中,我們將討論兩個主要面向:類別元件中的生命週期方法和 Hook。
生命週期方法是在元件生命週期的不同階段呼叫的特殊方法。以下是一些最常見的生命週期方法及其用途:
constructor(props) { super(props); this.state = { count: 0 }; }
componentDidMount() { this.fetchData(); }
componentDidUpdate(prevProps, prevState):元件更新後呼叫。對於響應 props 或狀態的變化很有用。請務必檢查更改以避免無限循環。
componentDidUpdate(prevProps) { if (this.props.id !== prevProps.id) { this.fetchData(); } }
componentWillUnmount():在元件從 DOM 刪除之前呼叫。對於清理訂閱、計時器或其他需要清理的操作很有用。
componentWillUnmount() { this.cleanup(); }
componentDidCatch(error, info):用於捕捉子元件中的錯誤。對於集中錯誤處理很有用。
componentDidCatch(error, info) { logErrorToMyService(error, info); }
React Hooks 是一個允許我們使用狀態和生命週期方法而無需編寫類別組件的函數。以下是一些最常用的 Hook:
用於新增狀態至功能組件。該函數傳回一對:當前狀態和更新它的函數。
import React, { useState } from 'react'; const Counter = () => { const [count, setCount] = useState(0); return ( <div> <p>Count: {count}</p> <button onClick={() => setCount(count + 1)}>Increment</button> </div> ); };
useEffect 讓我們在功能組件中運行副作用。它結合了 componentDidMount、componentDidUpdate 和 componentWillUnmount 的功能。
constructor(props) { super(props); this.state = { count: 0 }; }
componentDidMount() { this.fetchData(); }
componentDidUpdate(prevProps) { if (this.props.id !== prevProps.id) { this.fetchData(); } }
useContext Hook 用於存取功能組件中的上下文。這對於共享全域資料(例如主題或使用者身份驗證狀態)特別有用,無需進行道具鑽探。
範例:使用 useContext 進行主題化
在此範例中,我們將建立一個簡單的主題上下文,讓我們可以在淺色和深色主題之間切換。
1。建立主題上下文
首先,我們為主題建立一個上下文。
componentWillUnmount() { this.cleanup(); }
2。使用主題上下文
接下來,我們可以建立一個元件,該元件使用主題上下文來套用樣式並提供一個按鈕來切換主題。
componentDidCatch(error, info) { logErrorToMyService(error, info); }
3。使用主題提供者包裝應用程式
最後,我們用 ThemeProvider 包裝我們的應用程式(或其一部分),為其子層級提供主題上下文。
import React, { useState } from 'react'; const Counter = () => { const [count, setCount] = useState(0); return ( <div> <p>Count: {count}</p> <button onClick={() => setCount(count + 1)}>Increment</button> </div> ); };
說明
主題上下文建立:我們使用 createContext 和 ThemeProvider 元件建立一個 ThemeContext,管理目前主題狀態並提供切換它的功能。
上下文消耗:在 ThemedComponent 中,我們使用 useContext(ThemeContext) 來存取目前主題和切換功能。該元件根據當前主題呈現不同的內容,並包含一個切換它的按鈕。
應用程式結構:整個應用程式(或其一部分)包裝在 ThemeProvider 中,允許任何子元件存取主題上下文。
import React, { useState, useEffect } from 'react'; const FetchDataOnce = () => { const [data, setData] = useState([]); useEffect(() => { const fetchData = async () => { const response = await fetch('https://api.example.com/data'); const result = await response.json(); setData(result); }; fetchData(); }, []); // Effect runs only once when the component mounts return ( <ul> {data.map(item => ( <li key={item.id}>{item.name}</li> ))} </ul> ); };
import React, { useState, useEffect } from 'react'; const CountComponent = () => { const [count, setCount] = useState(0); useEffect(() => { console.log(`Count updated: ${count}`); const fetchData = async () => { const response = await fetch(`https://api.example.com/data/${count}`); const result = await response.json(); console.log(result); }; fetchData(); }); // Effect runs every time the component renders return ( <div> <p>Count: {count}</p> <button onClick={() => setCount(count + 1)}>Increment</button> </div> ); };
鉤子提供了靈活性以及在組件之間共享邏輯的能力,而無需使用高階組件(HOC)或渲染道具。使用 Hooks 的一些優點包括:
生命週期方法和 Hooks 是 React 開發的兩個重要面向。了解這兩個概念如何運作使我們能夠創建更有效率且可維護的元件。特別是 Hook,為開發功能元件開闢了新的可能性,改變了我們與狀態和副作用互動的方式。
透過掌握生命週期方法和 Hook,您將能夠建立更強壯、反應更快的 React 應用程式。快樂編碼!
以上是React Js 部分生命週期方法和 React 中的鉤子的詳細內容。更多資訊請關注PHP中文網其他相關文章!