React 業務場景使用相關封裝(hooks 使用)

React 業務場景相關方法封裝(hooks 使用)

React 中常用的三方 hooks 庫

庫名特點常見場景官方文檔
ahooks(阿里出品)豐富實用的 Hooks,和 Ant Design 配合最佳useRequest(請求管理)、useDebounceuseLocalStorageState、倒計時、節流https://ahooks.js.org/
React Query(TanStack Query)最強大的 服務端數據管理 庫,緩存、重試、樂觀更新API 請求、分頁、數據緩存與同步https://tanstack.com/query/latest
SWR(Vercel 出品)輕量級數據獲取,基于 SWR 策略(Stale-While-Revalidate)Next.js / CSR 數據獲取、自動緩存https://swr.vercel.app/
react-use最全的 Hooks 工具庫(涵蓋瀏覽器 API、狀態管理、UI 控制)本地存儲、窗口大小、點擊外部、全屏、鼠標狀態https://github.com/streamich/react-use
usehooks-ts簡潔實用的小 Hook 集合useDarkModeuseCopyToClipboarduseOnClickOutsideuseWindowSizehttps://usehooks-ts.com/
react-huse偏函數式編程的 Hooks 庫更偏小眾,適合函數式風格項目https://github.com/streamich/react-huse

react-use 相關使用

  1. 安裝庫 npm install react-use
  2. 按需 import { useXXX } from ‘react-use’
  3. 在組件內直接使用 Hook
  4. 官方文檔有豐富示例,幾乎涵蓋所有常用場景
    • GitHub
    • Hook 列表與示例

Array 相關封裝

場景:在開發中,經常需要對數組進行一些操作,如果直接使用原生方法可能會使代碼看起來非常臃腫。

hook 封裝:

import { useState, useCallback } from "react";/*** 通用數組 Hook* @param {Array} initialValue 初始數組*/
function useArrayState(initialValue = []) {const [array, setArray] = useState(initialValue);// 添加元素const push = useCallback((item) => {setArray((prev) => [...prev, item]);}, []);// 根據索引更新const updateByIndex = useCallback((index, newItem) => {setArray((prev) => {const newArr = [...prev];newArr[index] = newItem;return newArr;});}, []);// 根據 id 更新const updateById = useCallback((id, updater) => {setArray((prev) =>prev.map((item) =>item.id === id ? { ...item, ...updater(item) } : item));}, []);/*** ? 根據條件更新* @param {Function} predicate 條件函數* @param {Function} updater 更新函數* @param {"first"|"all"} mode 更新模式(默認 "all")*/const updateByCondition = useCallback((predicate, updater, mode = "all") => {setArray((prev) => {if (mode === "first") {const newArr = [...prev];const index = newArr.findIndex(predicate);if (index !== -1) {newArr[index] = { ...newArr[index], ...updater(newArr[index]) };}return newArr;}// 默認 all:更新所有滿足條件的元素return prev.map((item) =>predicate(item) ? { ...item, ...updater(item) } : item);});}, []);// 刪除元素(按索引)const removeByIndex = useCallback((index) => {setArray((prev) => prev.filter((_, i) => i !== index));}, []);// 刪除元素(按 id)const removeById = useCallback((id) => {setArray((prev) => prev.filter((item) => item.id !== id));}, []);// 清空數組const clear = useCallback(() => setArray([]), []);return {array,setArray,push,updateByIndex,updateById,updateByCondition, // ? 新增,支持 "first" | "all"removeByIndex,removeById,clear,};
}export default useArrayState;

使用:

import React from "react";
import useArrayState from "./useArrayState";const Demo = () => {const { array, updateByCondition, push } = useArrayState([{ id: 1, name: "Alice", age: 20 },{ id: 2, name: "Bob", age: 25 },{ id: 3, name: "Charlie", age: 30 },]);return (<div><h3>數組管理示例</h3><pre>{JSON.stringify(array, null, 2)}</pre>{/* 更新第一個年齡大于 21 的用戶 */}<buttononClick={() =>updateByCondition((item) => item.age > 21,() => ({ name: "🔥 First Updated" }),"first" // ? 只更新第一個符合條件的)}>更新第一個符合條件的用戶</button>{/* 更新所有年齡大于 21 的用戶 */}<buttononClick={() =>updateByCondition((item) => item.age > 21,() => ({ name: "🔥 All Updated" }),"all" // ? 默認,更新所有符合條件的)}>更新所有符合條件的用戶</button><buttononClick={() => push({ id: Date.now(), name: "New User", age: 28 })}>添加新用戶</button></div>);
};export default Demo;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/97223.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/97223.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/97223.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[高并發系統設計] - 搭建高并發高可用的系統 - 學習與探究

1.應用場景 主要用于高并發系統設計的架構演進和架構思路。 2.學習/操作 1.文檔閱讀 搭建高并發、高可用的系統 | Laravel China 社區 高并發&#xff0c; 你真的理解透徹了嗎&#xff1f; - 知乎 PHP實戰經驗之系統如何支撐高并發-51CTO.COM PHP高并發和大流量解決方案整理 …

【小白筆記】Visual Studio 在 2025年7月更新的功能說明(英文單詞記憶)

這是NVIDIA軟件中關于數據收集&#xff08;Usage Collection&#xff09;的選項。術語解釋NVIDIA Nsight Visual Studio Edition&#xff1a;這是一款由NVIDIA開發的工具&#xff0c;專門用于在Visual Studio這個集成開發環境&#xff08;IDE&#xff09;中進行GPU調試和性能分…

THM Whats Your Name WP

信息收集[2025-08-28 21:41:30] [SUCCESS] 端口開放 10.10.208.188:80[2025-08-28 21:41:30] [SUCCESS] 端口開放 10.10.208.188:22[2025-08-28 21:41:31] [SUCCESS] 端口開放 10.10.208.188:8081[2025-08-28 21:41:31] [SUCCESS] 服務識別 10.10.208.188:22 > [ssh] 版本:8…

MySQL底層數據結構與算法淺析

1、概述 MySQL中&#xff0c;當我們發現某個sql的執行時間很長時&#xff0c;最先想到的就是給表加索引&#xff0c;加了索引之后&#xff0c;查詢性能就會有顯著的提升。 為了知其所以然&#xff0c;那么只有去了解MySQL的底層儲存結構和索引的查詢算法&#xff0c;只有這樣才…

VisualStudio 將xlsx文件嵌入到資源中訪問時變String?

如題&#xff0c;就是這么詭異&#xff0c;時至如今已經是visual studio 2022了&#xff0c;你通過界面導入xlsx文件到資源中&#xff0c;它的類型就是String而且沒法修改! 即使將文件壓縮成zip再導入&#xff0c;依然是String&#xff01; 三哥的騷操作問你服不服! 然而&#…

【視頻講解】R語言海七鰓鰻性別比分析:JAGS貝葉斯分層邏輯回歸MCMC采樣模型應用

全文鏈接&#xff1a;https://tecdat.cn/?p43774 原文出處&#xff1a;拓端抖音號拓端tecdat 分析師&#xff1a;Yifei Liu 【視頻講解】R語言海七鰓鰻性別比分析&#xff1a;JAGS貝葉斯分層邏輯回歸引言&#xff1a;生態人都懂的痛——樣本少、結果被質疑&#xff0c;咋辦&am…

Android14 USB子系統的啟動以及動態切換相關的init.usb.rc詳解

init.usb.rc的作用是在Android系統啟動和運行時&#xff0c;通過監聽屬性&#xff08;sys.usb.config和sys.usb.configfs, sys.usb.typec.mode&#xff09;變化動態&#xff0c;通過寫入內核接口 /sys/class/android_usb/ 來配置USB模式。1 USB子系統的啟動1.1 on init階段的配…

宜春城區SDH網圖分析

一、SDH網圖展示 圖片來源&#xff1a; 本地網傳輸網組SDH網圖(2014年12月) - 百度文庫 SDH就是Synchronous Digital Hierarchy&#xff0c;同步數字體系的意思。 從分布圖可以看出&#xff0c;城區網和工業網一樣&#xff0c;是環狀結構&#xff0c;保障數據傳輸的穩定。我的…

lwIP MQTT 心跳 Bug 分析與修復

一、背景在使用 lwIP 內置 MQTT 客戶端時&#xff0c;如果你用的是 2.2.0 之前的版本&#xff0c;很可能會遇到一個惱人的問題&#xff1a;客戶端和服務器正常連接&#xff0c;但一段時間后 會話被 broker 踢掉。比如常見的現象&#xff1a;Mosquitto / EMQX 日志顯示客戶端超時…

Golang 面試題「中級」

以下是 100 道 Golang 中級面試題及答案&#xff0c;涵蓋并發編程、內存管理、接口實現、標準庫深入應用等核心知識點&#xff1a; 一、并發編程基礎與進階問題&#xff1a;Golang 的 GPM 調度模型中&#xff0c;G、P、M 分別代表什么&#xff1f;它們的協作關系是怎樣的&#…

沃爾瑪AI系統Wally深度拆解:零售業庫存周轉提速18%,動態定價爭議與員工轉型成熱議點

最近去沃爾瑪購物&#xff0c;發現以前總斷貨的那款早餐麥片居然常年擺在最顯眼的貨架上&#xff0c;而且價格每周末都會微調——這可不是巧合&#xff0c;背后藏著零售業最硬核的AI操作。沃爾瑪去年推出的智能系統Wally&#xff0c;正悄悄改變著我們買東西的體驗和商家的運營邏…

AutoDL算力云上傳文件太慢了如何解決?

----------------------------------------------------------------------------------------------- 這是我在我的網站中截取的文章&#xff0c;有更多的文章歡迎來訪問我自己的博客網站rn.berlinlian.cn&#xff0c;這里還有很多有關計算機的知識&#xff0c;歡迎進行留言或…

【智慧城市】2025年中國地質大學(武漢)暑期實訓優秀作品(2):智慧城市西安與一帶一路

PART 01 項目背景01政策與時代背景近年來&#xff0c;隨著科技的飛速發展和政策的積極推動&#xff0c;我國新型智慧城市建設取得了顯著成效。在“十四五”國家信息化規劃中&#xff0c;明確提出要打造智慧高效的城市治理體系&#xff0c;推動城市管理精細化、服務智能化。同時…

MySQL數據庫精研之旅第十四期:索引的 “潛規則”(上)

專欄&#xff1a;MySQL數據庫成長記 個人主頁&#xff1a;手握風云 目錄 一、索引簡介 1.1. 索引是什么 1.2. 為什么需要索引 二、索引應該選擇哪種數據結構 2.1. Hash 2.2. 二叉搜索樹 2.3. N叉樹 2.4. B樹 三、MySQL中的頁 3.1. 為什么要使用頁 3.2. 頁文件頭和頁…

架構設計——云原生與分布式系統架構

** 云原生與分布式系統架構** 5.1 云選型策略&#xff1a;多云、混合云還是單云&#xff1f;如何決定&#xff1f; “上云”已無需討論&#xff0c;但“上什么云”是第一個戰略決策。單云&#xff08;Single Cloud&#xff09;策略&#xff1a; 描述&#xff1a; 將全部資源集中…

Python圖片轉WebP常用庫推薦:Pillow、Wand、cv2

摘要 Python轉換圖片為WebP&#xff0c;Pillow最推薦&#xff1a;安裝簡單&#xff08;pip install pillow&#xff09;、使用方便&#xff0c;代碼示例顯示處理RGBA轉RGB等細節&#xff0c;適合多數場景&#xff1b;Wand功能更強基于ImageMagick&#xff0c;適合需高級處理的場…

Android WPS Office 18.20

WPS Office是一款集Word&#xff0c;PDF&#xff0c;Sheet&#xff0c;PowerPoint&#xff0c;表格&#xff0c;文檔&#xff0c;云存儲&#xff0c;模板庫和在線編輯與共享于一體的多功能免費辦公套件。它提供類似于Microsoft Office的功能&#xff0c;包括文字處理、表格編輯…

Elasticsearch核心配置與性能優化

以下是Elasticsearch&#xff08;ES&#xff09;的 核心配置項 及 性能優化措施&#xff0c;涵蓋硬件、系統、ES配置、索引設計等關鍵方面&#xff0c;幫助提升集群穩定性與查詢性能&#xff1a;一、硬件與系統層優化內存分配 堆內存&#xff08;Heap Size&#xff09;&#xf…

【谷歌瀏覽器】瀏覽器實用自用版——谷歌瀏覽器(Google Chrome)離線純凈版安裝 官方版無任何捆綁及廣告 【離線安裝谷歌瀏覽器】

經常上網的朋友們肯定深有體會&#xff1a;如今不少瀏覽器動不動就彈廣告、塞插件&#xff0c;用起來簡直是折磨。面對這些“全家桶”式捆綁&#xff0c;大家都渴望能找到一款干凈、簡潔、無打擾的瀏覽器——這時候&#xff0c;Google Chrome&#xff08;谷歌瀏覽器&#xff09…

2025年滲透測試面試題總結-39(題目+回答)

安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 3. SAST&#xff08;靜態應用安全測試&#xff09; 4. IAST&#xff08;交互式應用安全測試&#xff09; …