」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 透過自訂 Hooks 在 React 中重複使用邏輯:實用指南

透過自訂 Hooks 在 React 中重複使用邏輯:實用指南

發佈於2024-11-08
瀏覽:401

Reusing Logic in React with Custom Hooks: a Practical guide

自訂鉤子是React 中的一項強大功能,與React 內建鉤子不同,它用於更具體的目的,並且它是透過將常見功能封裝到獨立函數中來完成的。自訂掛鉤促進可重複使用性、改進元件組織並整體增強程式碼可維護性。

在本指南中,我們將深入探討使用自訂鉤子的目的,以了解創建自訂鉤子的基礎知識以及如何使用其他元件。然後我們將透過建立 fetch API 自訂掛鉤來說明一個現實世界的範例。

了解基礎知識

通常開發人員會害怕自訂掛鉤這個術語,所以讓我們揭開它的神秘面紗。

自訂鉤子只是一個以 use 前綴開頭的函數(這對於自訂鉤子的工作至關重要)。
此函數由利用 React 內建鉤子的可重複使用邏輯組成。如果您在多個元件中具有相同的邏輯,通常您會考慮使用自訂掛鉤,因此透過利用自訂掛鉤您可以解決多個問題,例如增強程式碼組織和可維護性。

建立一個簡單的自訂鉤子

下面的範例是一個簡單的計數器自訂掛鉤,它使用 useState 掛鉤管理計數狀態,並使用僅設定計數狀態的增量或減量函數分別更新計數。

import { useState } from 'react'

const useCount = () => {
  const [count, setCount] = useState(0)

  const increment = () => setCount(prev => prev   1)
  const decrement = () => setCount(prev => prev - 1)

  return { count, increment, decrement }
}

export default useCount;

恭喜您剛剛建立了自己的自訂掛鉤,這非常簡單。接下來將深入探討如何使用這個鉤子

在元件中使用自訂鉤子

在另一個元件中使用自訂鉤子只需破壞其他元件內自訂鉤子的回傳值即可完成

import useCount from 'customHooks'

const Page = () => {
  const {count, increment, decrement} = useCount()

  return(
    
{ count }
) } export default Page

使用自訂鉤子的真實範例

最重複的邏輯之一是獲取 API,電子商務網站將獲取用於身份驗證、支付流程、顯示所有產品、評論、評論等的資料。

您可以想像整個應用程式中重複取得邏輯的數量,可以使用自訂掛鉤來簡化。

本節將建立一個自訂抓取鉤子。

我們將使用 useState 和 useEffect 內建 React hooks
我們將有一個資料狀態,一個掛起狀態(如果我們想在獲取資料時顯示旋轉器)和一個錯誤狀態(如果獲取失敗)。

下面的程式碼是不言自明的。在 useEffect 內部,我們定義了一個非同步的 fetchData 函數,它將處理取得邏輯。在 useEffect 下面,自訂鉤子將傳回下列值,這些值可在所有其他元件中使用:data、pending、error。

請注意,我們正在將 url 值傳遞給 useFetch 自訂鉤子參數,這意味著資料可以傳遞到自訂鉤子

import {useState, useEffect} from 'react'

const useFetch = (url: string) => {
  const [data, setData] = useState([])
  const [pending, setPending] = useState(false)
  const [error, setError] = useState(null)

  useEffect(() => {
    const fetchData = async () => {
      setPending(true)

      await fetch(url)
        .then(result => {
          if (!result.ok) throw new Error('something went wrong!')
          return result.json()
        })
        .then(result => {
          setData(result)
          setPending(false)
        })
        .catch(error => setError(error))
    }

   fetchData()
  }, [url])

  return { data, pending, error }

}

export default useFetch

透過在頁面元件中使用 useFetch 鉤子,我們現在可以在出現錯誤時向客戶端顯示訊息,在取得資料時顯示旋轉器,最後向客戶端顯示資料。

該元件可以在所有應用程式中重複使用,從而減少重複程式碼的數量。

import useFetch from './hooks/useFetch'
import Spinner from "./icons/Spinner"

const Page = () => {
  const {data, pending, error} = useFetch('https://jsonplaceholder.typicode.com/posts')

  if(error) 
Cloud not fetch data from the server
return( {pending ? ( ) : ( data.map((item) => (

{item.title}

{item.body}

) ) )} ) } export default Page;

結論

自訂鉤子為React元件中的邏輯封裝和重複使用提供了強大的機制,透過將通用功能提取到專用函數中,可以增強程式碼組織,提高可維護性,並促進程式碼可重複使用性。

我們探索了創建自訂鉤子的基礎知識,了解如何在 React 元件中使用它們,並展示了使用自訂鉤子的真實範例。

版本聲明 本文轉載於:https://dev.to/kada/reusing-logic-in-react-with-custom-hooks-a-practical-guide-4li1?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何使用 CSS 設定表格列寬?
    如何使用 CSS 設定表格列寬?
    設定表格列寬表格通常用於呈現表格數據,但調整列寬對於確保可讀性和正確性至關重要結盟。在本文中,我們將探討如何使用 CSS 設定表格列的寬度。 使用 CSS 寬度屬性的方法表格列的寬度可以使用 col 元素的 width 屬性進行設定。寬度值可以以像素為單位指定(例如 width: 200px;),也...
    程式設計 發佈於2024-11-08
  • 如何從 Python 中的巢狀函數存取非局部變數?
    如何從 Python 中的巢狀函數存取非局部變數?
    存取嵌套函數作用域中的非局部變數在Python 中,嵌套函數作用域提供對封閉作用域的訪問。但是,嘗試修改巢狀函數內封閉範圍內的變數可能會導致 UnboundLocalError。 要解決此問題,您有多種選擇:1。使用 'nonlocal' 關鍵字 (Python 3 ):對於 Pyt...
    程式設計 發佈於2024-11-08
  • 使用 CSS 將漸層應用於文字。
    使用 CSS 將漸層應用於文字。
    文字漸變 現在你可以在很多地方看到像文字漸變這樣的好技巧......但是呢?你有沒有想過它們是如何製作的?今天就讓我來教你。 .text-gradient { background: linear-gradient(-25deg, #5662f6 0%, #7fffd4 10...
    程式設計 發佈於2024-11-08
  • 如何在Python中執行自訂區間舍入?
    如何在Python中執行自訂區間舍入?
    Python 中捨入為自訂間隔在 Python 中,內建 round() 函數通常用於對數值進行舍入。然而,它採用以 10 為基數的捨入方案,這可能並不總是適合特定要求。例如,如果您想將數字四捨五入到最接近的 5 倍數,則標準 round() 函數不合適。 要解決此問題,可以建立自訂函數,將數值四捨...
    程式設計 發佈於2024-11-08
  • 項目 注意字串連接效能
    項目 注意字串連接效能
    1。使用運算子 ( ) 連接字串: 使用運算子連接字串對於少量連接來說很方便,但由於字串的不變性,在大規模操作時會出現效能問題。 每次建立新字串時,都會複製所有先前字串的內容,從而導致大型連接的時間成二次方。 不正確的例子(與 重複連接): public String criaFatura(Li...
    程式設計 發佈於2024-11-08
  • 如何解決 Wamp 伺服器中的橘色圖示問題:識別服務故障並對其進行故障排除
    如何解決 Wamp 伺服器中的橘色圖示問題:識別服務故障並對其進行故障排除
    解決Wamp Server 中頑固的橙色圖標解決Wamp Server 中頑固的橙色圖標在Web 開發領域,WampServer 圖標旁邊出現橙色圖標可以成為令人沮喪的橙色路障。此持久性圖示通常表示啟動 Apache 或 MySQL 服務失敗,使您陷入開發困境。 識別罪魁禍首:Apache 或 My...
    程式設計 發佈於2024-11-08
  • 網路基礎知識
    網路基礎知識
    In the world of system design, networks are the glue that binds different components together. Whether you're building a web application, a distribute...
    程式設計 發佈於2024-11-08
  • Python 初學者教學:學習基礎知識
    Python 初學者教學:學習基礎知識
    欢迎来到Python编程的奇妙世界!如果您是编码新手,请系好安全带,因为 Python 是最简单但最强大的语言之一。无论您是想自动执行繁琐的任务、构建 Web 应用程序还是深入研究数据科学,Python 都是您成功编码的门户。 在本初学者指南中,我们将引导您完成 Python 的基本构建块,确保您准...
    程式設計 發佈於2024-11-08
  • 如何提取MySQL字串中第三個空格之後的子字串?
    如何提取MySQL字串中第三個空格之後的子字串?
    MySQL:提取字串中的第三個索引要使用MySQL 定位字串中第三個空格的索引,一種方法是利用SUBSTRING_INDEX 函數。此函數可以提取直到指定分隔符號(在本例中為空格字元)的子字串。 要隔離第三個空格,您可以使用兩個巢狀的 SUBSTRING_INDEX 呼叫。內部函數呼叫檢索從字串開頭...
    程式設計 發佈於2024-11-08
  • 如果無法存取已指派的空間,為什麼要為 ArrayList 設定初始大小?
    如果無法存取已指派的空間,為什麼要為 ArrayList 設定初始大小?
    了解 ArrayList 中的初始大小在 Java 中,ArrayList 是動態數組,可以根據需要增長和縮小。可以使用建構子 new ArrayList(10) 指定 ArrayList 的初始大小,其中 10 表示所需的容量。 但是,設定初始大小並未授予立即存取已指派空間的權限。與傳統陣列不同,...
    程式設計 發佈於2024-11-08
  • 如何在不改變系統設定的情況下使Python 2.7成為Linux中的預設版本?
    如何在不改變系統設定的情況下使Python 2.7成為Linux中的預設版本?
    Linux 中的預設 Python 版本:選擇 Python 2.7在 Linux 系統上運行多個 Python 版本是常見的情況。然而,瀏覽預設版本有時可能會很困難。本文討論如何在終端機上鍵入「python」命令時將 Python 2.7 設為預設版本。 預設 Python 更改的評估更改預設 P...
    程式設計 發佈於2024-11-08
  • 如何根據多個條件對 Go 中具有嵌套切片的結構切片進行排序?
    如何根據多個條件對 Go 中具有嵌套切片的結構切片進行排序?
    使用嵌套切片對結構體切片進行排序在Go 中,您可以使用內建的排序包對自訂結構體切片進行排序。考慮以下程式碼,它定義了兩個結構體 Parent 和 Child,表示父子關係:type Parent struct { id string children []Child } ...
    程式設計 發佈於2024-11-08
  • C# | Web Api 的提示和技巧
    C# | Web Api 的提示和技巧
    筆記 您可以查看我個人網站上的其他帖子:https://hbolajraf.net Web Api 的提示和技巧 用 C# 建立 Web API 是創建可擴展且高效的後端服務的強大方法。以下是一些提示和技巧,可協助您充分利用 C# Web API 開發。 1.使...
    程式設計 發佈於2024-11-08
  • JavaScript 模組
    JavaScript 模組
    現在我們不再將所有 JS 寫在一個文件中並發送給客戶端。 今天,我們將程式碼編寫到模組中,這些模組之間共享資料並且更易於維護。 約定是使用駝峰命名法命名模組。 我們甚至可以透過 npm 儲存庫將第 3 方模組包含到我們自己的程式碼中,例如 jquery、react、webpack、babel...
    程式設計 發佈於2024-11-08
  • 適合前端開發人員的最佳 JavaScript 框架
    適合前端開發人員的最佳 JavaScript 框架
    要開始您作為前端開發人員的旅程,選擇正確的 JavaScript 框架可以顯著影響您的學習曲線和專案成功。以下是每個前端開發人員都應該選擇的一些最佳 JavaScript 框架。 1. 反應 React 是一個廣泛使用的 JavaScript 函式庫,用於建立使用者介面,主要關注單...
    程式設計 發佈於2024-11-08

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

Copyright© 2022 湘ICP备2022001581号-3