」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > React 中的自訂 Hook

React 中的自訂 Hook

發佈於2024-11-04
瀏覽:892

Custom Hooks in React

React 中的自訂 Hook 是一項強大的功能,可讓您跨多個元件提取和重複使用邏輯。它們使您能夠封裝複雜的狀態邏輯,使您的元件更乾淨且更易於維護。以下是如何建立和使用自訂掛鉤的快速概述和範例。

建立自訂鉤子

自訂鉤子本質上是一個 JavaScript 函數,其名稱以 use 開頭,並且可以呼叫其中的其他鉤子。這是管理計數器的自訂掛鉤的簡單範例:

import { useState } from 'react';

// Custom Hook: useCounter
function useCounter(initialValue = 0) {
    const [count, setCount] = useState(initialValue);

    const increment = () => setCount(c => c   1);
    const decrement = () => setCount(c => c - 1);
    const reset = () => setCount(initialValue);

    return { count, increment, decrement, reset };
}

export default useCounter;

使用自訂掛鉤

您可以在任何功能元件中使用 useCounter 鉤子:

import React from 'react';
import useCounter from './useCounter';

function CounterComponent() {
    const { count, increment, decrement, reset } = useCounter(0);

    return (
        

Count: {count}

); } export default CounterComponent;

重點

  1. 命名約定:自訂鉤子的名稱始終以 use 開頭,以遵循 React 的約定。
  2. 可重複使用性:自訂掛鉤可以在多個元件中重複使用,促進 DRY(不要重複自己)程式碼。
  3. 狀態管理:您可以管理狀態、執行副作用以及利用自訂掛鉤中的其他掛鉤。

進階範例:取得數據

這是用於獲取資料的更高級的自訂掛鉤:

import { useState, useEffect } from 'react';

function useFetch(url) {
    const [data, setData] = useState(null);
    const [loading, setLoading] = useState(true);
    const [error, setError] = useState(null);

    useEffect(() => {
        const fetchData = async () => {
            try {
                const response = await fetch(url);
                if (!response.ok) throw new Error('Network response was not ok');
                const result = await response.json();
                setData(result);
            } catch (error) {
                setError(error);
            } finally {
                setLoading(false);
            }
        };

        fetchData();
    }, [url]);

    return { data, loading, error };
}

export default useFetch;

用法

您可以在元件中使用useFetch鉤子來取得資料:

import React from 'react';
import useFetch from './useFetch';

function DataFetchingComponent() {
    const { data, loading, error } = useFetch('https://api.example.com/data');

    if (loading) return 

Loading...

; if (error) return

Error: {error.message}

; return (

Data:

{JSON.stringify(data, null, 2)}
); } export default DataFetchingComponent;
); } 導出預設的DataFetchingComponent;

自訂掛鉤是以乾淨且可維護的方式封裝邏輯並在元件之間共用功能的好方法。

版本聲明 本文轉載於:https://dev.to/imyusufakhtar/custom-hooks-in-react-2mk4?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-11-18
  • 如何從 JavaScript 點選事件呼叫 ASP.NET 方法?
    如何從 JavaScript 點選事件呼叫 ASP.NET 方法?
    從JavaScript 存取ASP.NET 函數要從JavaScript 的點選事件呼叫ASP.NET 方法,可以使用非標準方法:受僱。這裡有詳細的指南:使用IPostBackEventHandler 介面增強Page 類別:在您的ASP.NET 程式碼檔案中,使用以下程式碼繼承Page 類別: I...
    程式設計 發佈於2024-11-18
  • 您可以在 JavaScript 中的條件語句內宣告函數嗎?
    您可以在 JavaScript 中的條件語句內宣告函數嗎?
    條件語句中的函數宣告在 JavaScript 中,函數宣告具有不同的行為,取決於流行的語言標準及其執行環境。 嚴格模式 (ES5)嚴格模式,在 ECMAScript 5 中引入(ES5),條件語句中不允許使用函數宣告。這是因為函數宣告建立了提升變量,這些變數的作用域為整個函數或全域作用域。將它們放...
    程式設計 發佈於2024-11-18
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-18
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-11-18
  • 複雜的查詢條件應該在資料映射器還是服務層處理?
    複雜的查詢條件應該在資料映射器還是服務層處理?
    如何處理複雜查詢條件:Data Mapper vs. Service Layer如何處理複雜查詢條件:Data Mapper vs. Service Layer在物件導向程式中處理複雜查詢條件時,主要有兩種方法:在資料映射器或服務層中處理它們。 資料映射器方法資料映射器模式用於將網域物件對應到和來自...
    程式設計 發佈於2024-11-18
  • 當前MySQL root密碼為空時如何重置?
    當前MySQL root密碼為空時如何重置?
    重設MySQL Root 密碼當使用空密碼以root 身分登入時遇到困難,透過傳統方式修改它可能會面臨挑戰方法。本文探討了強制重設 root 密碼的替代解決方案。 強制密碼重設:建立密碼重設腳本:先製作一個包含以下指令的腳本: UPDATE mysql.user SET Password=PASSW...
    程式設計 發佈於2024-11-18
  • 如何使用 C 或 C++ 中的 Win32 API 從 DLL 和 EXE 檢索版本資訊?
    如何使用 C 或 C++ 中的 Win32 API 從 DLL 和 EXE 檢索版本資訊?
    取得 DLL 和 EXE 的版本資訊許多應用程式需要能夠從檔案中擷取版本資訊。此資訊用於顯示目的,例如在屬性對話方塊上顯示版本號。 Win32 API 提供了多個可用於取得版本資訊的函數。常見的方法是使用 GetFileVersionInfo API。 使用 GetFileVersionInfoGe...
    程式設計 發佈於2024-11-18
  • 如何從同一本地網路上的另一台電腦存取 FastAPI 後端?
    如何從同一本地網路上的另一台電腦存取 FastAPI 後端?
    如何從同一本地網路上的不同電腦/IP 存取FastAPI 後端從同一本地網路上的不同電腦存取FastAPI 後端同一本地網絡,必須確保以下幾點:1.主機標誌配置:運行FastAPI伺服器時將主機標誌設定為0.0.0.0。這允許伺服器偵聽本機電腦上的所有可用 IP 位址。 2。防火牆調整:確保防火牆配...
    程式設計 發佈於2024-11-18
  • 使用 Symbol.iterator 控制循環
    使用 Symbol.iterator 控制循環
    您是否曾经使用过 Object.entries 并想知道它是如何工作的?比你想象的要简单得多! 这是一个基本实现: function objectEntries(obj) { const entries = []; for (const key in obj) { if (Objec...
    程式設計 發佈於2024-11-18
  • 如何在 Python 中找到兩個列表之間的差異?
    如何在 Python 中找到兩個列表之間的差異?
    在 Python 中計算列表差異在 Python 中處理列表時,理解兩個列表之間的差異至關重要。有多種方法可以實現這一目標,每種方法都有自己的優點和應用。最常見的方法之一是使用集合差。 集合差值集合差值是一種數學運算,用於計算一個集合中存在但不存在的元素其他。套用於清單時,可以有效地突出顯示兩個清單...
    程式設計 發佈於2024-11-18
  • 在 React 中快取資料:提升效能和使用者體驗
    在 React 中快取資料:提升效能和使用者體驗
    在 React 中快取資料可以透過減少多次獲取相同資料的需要來顯著提高效能和使用者體驗。以下是React中實作資料快取的幾種方法: 1. 使用狀態管理庫 Redux:使用 Redux 將您的資料儲存在集中儲存中。您可以在 Redux 狀態下快取 API 回應,並且僅在資料不可用時才取...
    程式設計 發佈於2024-11-18
  • PythonW.exe 與 Python.exe:我什麼時候應該使用它們?
    PythonW.exe 與 Python.exe:我什麼時候應該使用它們?
    PythonW.exe 與Python.exe:何時使用每個主要差異摘要: python.exe:CLI 腳本的控制台應用程式CLI 腳本的控制台應用程式開啟控制台視窗連接到控制台的標準流同步執行pythonw.exe:GUI/no-UI的GUI應用程式腳本沒有開啟控制台視窗非同步執行標準流不可用場...
    程式設計 發佈於2024-11-18
  • Java中如何使用Streams計算最大值和最小值?
    Java中如何使用Streams計算最大值和最小值?
    在這篇文章中,我們將了解如何使用 Java Streams API 來計算元素集合的最大值和最小值。為此,我們將使用 Stream 類別的 max() 和 min() 方法。這些方法允許我們使用自訂比較器分別取得元素集合的最大值和最小值。 假設我們有一個類型為 List 的列表,其中 Exam 是...
    程式設計 發佈於2024-11-18
  • 在 Android Studio 中使用大型 Google JAR 檔案時如何修復「GC Overhead Limit Exceeded」錯誤?
    在 Android Studio 中使用大型 Google JAR 檔案時如何修復「GC Overhead Limit Exceeded」錯誤?
    Android Studio Google JAR 檔案:解決GC 開銷限制超出錯誤Android Studio Google JAR 檔案:解決GC 開銷限制超出錯誤建置Android 時可能會遇到「超出GC 開銷限制」錯誤由於dexing過程中記憶體消耗過多,Android Studio中的專案...
    程式設計 發佈於2024-11-18

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

Copyright© 2022 湘ICP备2022001581号-3