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

React 中的自訂 Hook:用例和意義

發佈於2024-08-01
瀏覽:165

Custom Hooks in React: Use Cases and Significance

React 中的自訂鉤子是封裝可重複使用邏輯、管理狀態和處理副作用的絕佳方法,可保持程式碼整潔和可維護。以下是一些關鍵用例以及建立自訂掛鉤的意義:

1.跨元件重複使用邏輯

範例:從 API 取得資料。
您可以建立一個自訂掛鉤(例如 useFetch)來封裝獲取資料並處理載入、成功和錯誤狀態的邏輯。然後可以在多個元件中重複使用該邏輯。

import { useState, useEffect } from 'react';

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

  useEffect(() => {
    fetch(url)
      .then((response) => response.json())
      .then((data) => {
        setData(data);
        setLoading(false);
      })
      .catch((error) => {
        setError(error);
        setLoading(false);
      });
  }, [url]);

  return { data, loading, error };
};

export default useFetch;

2.管理複雜狀態邏輯

範例:管理表單狀態[​​&&&] 自訂掛鉤可用於以可重複使用的方式管理表單狀態和驗證邏輯。

從 'react' 導入 { useState }; const useForm = (初始狀態) => { const [值,setValues] = useState(initialState); const handleChange = (事件) => { const { 名稱,值 } = event.target; 設定值({ ……價值觀, [名稱]:值, }); }; 常數重設表單 = () => { setValues(初始狀態); }; 傳回[值,handleChange,resetForm]; }; 導出預設的useForm;
import { useState } from 'react';

const useForm = (initialState) => {
  const [values, setValues] = useState(initialState);

  const handleChange = (event) => {
    const { name, value } = event.target;
    setValues({
      ...values,
      [name]: value,
    });
  };

  const resetForm = () => {
    setValues(initialState);
  };

  return [values, handleChange, resetForm];
};

export default useForm;

3.抽象副作用

範例:與本地儲存同步。 您可以建立自訂掛鉤來管理與本機儲存同步的狀態。

從 'react' 導入 { useState, useEffect }; const useLocalStorage = (key, 初始值) => { const [值,setValue] = useState(() => { const storeValue = localStorage.getItem(key); 傳回儲存值? JSON.parse(storedValue) : 初始值; }); 使用效果(()=> { localStorage.setItem(key, JSON.stringify(value)); }, [核心價值]); 返回[值,設定值]; }; 導出預設useLocalStorage;
import { useState, useEffect } from 'react';

const useLocalStorage = (key, initialValue) => {
  const [value, setValue] = useState(() => {
    const storedValue = localStorage.getItem(key);
    return storedValue ? JSON.parse(storedValue) : initialValue;
  });

  useEffect(() => {
    localStorage.setItem(key, JSON.stringify(value));
  }, [key, value]);

  return [value, setValue];
};

export default useLocalStorage;


自訂 Hook 的意義

1.代碼可重複使用性 自訂掛鉤可讓您在多個元件之間重複使用邏輯,而無需重複程式碼,從而促進 DRY(不要重複自己)原則。

2.關注點分離 透過將邏輯從元件移出並放入鉤子中,您可以使元件程式碼更清晰並更專注於渲染,而自訂鉤子則處理邏輯。

3.可測試性 自訂掛鉤可以獨立於使用它們的元件進行測試,從而更容易為複雜邏輯編寫單元測試。

3.一致性 使用自訂掛鉤可確保應用程式不同部分的行為一致,因為在呼叫掛鉤的任何地方都使用相同的邏輯。

結論 React 中的自訂鉤子是創建可重複使用、可維護和可測試程式碼的強大工具。它們可協助您封裝複雜的邏輯,有效管理狀態和副作用,並促進關注點分離和程式碼可重複使用性等最佳實踐。透過利用自訂掛鉤,您可以保持元件乾淨並專注於其主要目的:渲染 UI。

版本聲明 本文轉載於:https://dev.to/hargun_singh/custom-hooks-in-react-use-cases-and-significance-4931?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何修復 PHP 透過 SSH 連接 MySQL 時的 mysqli_connect() 參數問題?
    如何修復 PHP 透過 SSH 連接 MySQL 時的 mysqli_connect() 參數問題?
    在 PHP 中透過 SSH 連接到 MySQL 伺服器使用 PHP 函數透過 SSH 建立與遠端 Linux 電腦上託管的 MySQL 資料庫的連接可能具有挑戰性。使用提供的程式碼時,可能會出現錯誤「mysqli_connect()期望參數6為字串,給定資源」。 理解問題程式碼嘗試使用mysqli_...
    程式設計 發佈於2024-11-06
  • 微服務項目
    微服務項目
    ⚙️微服務專案的靈感來自@sqshq「Alexander Lukyanchikov」的piggymetrics,但這個實作使用了PostgreSQL和更簡單的業務邏輯,這個專案的主要目標是展示微服務架構的範例。 TechStack:PostgreSQL、Spring、Docker 我正在考慮可以添...
    程式設計 發佈於2024-11-06
  • 優化 AWS ECS 的 Java 堆設置
    優化 AWS ECS 的 Java 堆設置
    我們在 AWS Elastic Container Service(ECS) Fargate 上執行多個 Java 服務 (Corretto JDK21)。每個服務都有自己的容器,我們希望使用為每個進程支付的所有可能的資源。但這些步驟可以應用於 EC2 和其他雲端。 服務正在運行批次作業,延遲並不...
    程式設計 發佈於2024-11-06
  • PHP 初學者必備知識:釋放網站的全部潛力
    PHP 初學者必備知識:釋放網站的全部潛力
    PHP基礎:釋放網站潛能PHP是強大的伺服器端腳本語言,廣泛用於建立動態網站。對於初學者來說,掌握PHP基礎知識至關重要。本文將提供一個全面的指南,涵蓋PHP編程的基本要素,並透過實戰案例鞏固理解。 安裝並設定PHP要開始使用PHP,您需要安裝PHP解釋器和相關的軟體。遵循以下步驟:- 下载并安装P...
    程式設計 發佈於2024-11-06
  • 如何確定 PHP 標頭的正確圖片內容類型?
    如何確定 PHP 標頭的正確圖片內容類型?
    確定PHP 標頭的圖像內容類型確定PHP 標頭的圖像內容類型使用Header() 函數從Web 根目錄之外顯示圖像時,用戶可能會遇到困惑關於指定的內容類型:image/png。然而,儘管內容類型固定,但具有各種擴展名的圖像(例如, JPG、GIF)仍然可以成功顯示。 $filename = base...
    程式設計 發佈於2024-11-05
  • ByteBuddies:使用 Python 和 Tkinter 建立互動式動畫寵物
    ByteBuddies:使用 Python 和 Tkinter 建立互動式動畫寵物
    大家好! 我很高興向大家介紹 ByteBuddies,這是一個用 Python 和 Tkinter 創建的個人項目,展示了互動式動畫虛擬寵物。 ByteBuddies 將引人入勝的動畫與使用者交互相結合,提供了展示 GUI 程式設計強大功能的獨特體驗。該項目旨在透過提供互動式虛擬寵物來讓您的螢幕充...
    程式設計 發佈於2024-11-05
  • 如何解決“TypeError:\'str\'物件不支援專案分配”錯誤?
    如何解決“TypeError:\'str\'物件不支援專案分配”錯誤?
    'str'物件項目分配錯誤疑難排解'str'物件項目分配錯誤疑難排解嘗試在Python 中修改字串中的特定字元時,您可能會遇到錯誤「類型錯誤:「str」物件不支援專案分配。」發生這種情況是因為Python 中的字串是不可變的,這意味著它們無法就地更改。 >>...
    程式設計 發佈於2024-11-05
  • 如何緩解 GenAI 程式碼和 LLM 整合中的安全問題
    如何緩解 GenAI 程式碼和 LLM 整合中的安全問題
    GitHub Copilot and other AI coding tools have transformed how we write code and promise a leap in developer productivity. But they also introduce new ...
    程式設計 發佈於2024-11-05
  • Spring 中的 ContextLoaderListener:必要的邪惡還是不必要的複雜?
    Spring 中的 ContextLoaderListener:必要的邪惡還是不必要的複雜?
    ContextLoaderListener:必要的邪惡還是不必要的複雜? 開發人員經常遇到在 Spring Web 應用程式中使用 ContextLoaderListener 和 DispatcherServlet。然而,一個令人煩惱的問題出現了:為什麼不簡單地使用 DispatcherServle...
    程式設計 發佈於2024-11-05
  • JavaScript 機器學習入門:TensorFlow.js 初學者指南
    JavaScript 機器學習入門:TensorFlow.js 初學者指南
    機器學習 (ML) 迅速改變了軟體開發世界。直到最近,由於 TensorFlow 和 PyTorch 等函式庫,Python 仍是 ML 領域的主導語言。但隨著 TensorFlow.js 的興起,JavaScript 開發人員現在可以深入令人興奮的機器學習世界,使用熟悉的語法直接在瀏覽器或 Nod...
    程式設計 發佈於2024-11-05
  • extjs API 查詢參數範例
    extjs API 查詢參數範例
    API 查詢 參數是附加到 API 請求 URL 的鍵值對,用於傳送附加資訊至伺服器。它們允許用戶端(例如 Web 瀏覽器或應用程式)在向伺服器發出請求時指定某些條件或傳遞資料。 查詢參數加入到 URL 末端問號 (?) 後。每個參數都是鍵值對,鍵和值之間以等號 (=) 分隔。如果有多個查詢參數,...
    程式設計 發佈於2024-11-05
  • 如何解決Go中從不同套件匯入Proto檔案時出現「Missing Method Protoreflect」錯誤?
    如何解決Go中從不同套件匯入Proto檔案時出現「Missing Method Protoreflect」錯誤?
    如何從不同的套件導入Proto 檔案而不遇到「Missing Method Protoreflect」錯誤在Go 中,protobuf 常用於資料序列化。將 protobuf 組織到不同的套件中時,可能會遇到與缺少 ProtoReflect 方法相關的錯誤。當嘗試將資料解組到單獨套件中定義的自訂 p...
    程式設計 發佈於2024-11-05
  • 為什麼MySQL在查詢「Field = 0」非數位資料時傳回所有行?
    為什麼MySQL在查詢「Field = 0」非數位資料時傳回所有行?
    不明確的查詢:理解為什麼MySQL 回傳「Field=0」的所有行在MySQL 查詢領域,一個看似無害的比較,例如“SELECT * FROM table WHERE email=0”,可能會產生意外的結果。它沒有按預期過濾特定行,而是返回表中的所有記錄,從而引發了對資料安全性和查詢完整性的擔憂。 ...
    程式設計 發佈於2024-11-05
  • 伺服器發送事件 (SSE) 的工作原理
    伺服器發送事件 (SSE) 的工作原理
    SSE(服务器发送事件)在 Web 开发领域并未广泛使用,本文将深入探讨 SSE 是什么、它是如何工作的以及它如何受益您的申请。 什么是上交所? SSE 是一种通过 HTTP 连接从服务器向客户端发送实时更新的简单而有效的方法。它是 HTML5 规范的一部分,并受到所有现代 Web ...
    程式設計 發佈於2024-11-05
  • 如何從字串 TraceID 建立 OpenTelemetry Span?
    如何從字串 TraceID 建立 OpenTelemetry Span?
    從字串 TraceID 建構 OpenTelemetry Span要建立 Span 之間的父子關係,必須在上下文傳播不可行的情況下使用標頭。在這種情況下,追蹤 ID 和跨度 ID 包含在訊息代理程式的標頭中,這允許訂閱者使用父追蹤 ID 建立新的跨度。 解決方案以下步驟可以使用追蹤ID 在訂閱者端建...
    程式設計 發佈於2024-11-05

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

Copyright© 2022 湘ICP备2022001581号-3