React強大且靈活hooks庫——ahooks入門實踐之常用場景hook

什么是 ahooks?

ahooks 是一個 React Hooks 庫,提供了大量實用的自定義 hooks,幫助開發者更高效地構建 React 應用。其中場景類 hooks 是 ahooks 的一個重要分類,專門針對特定業務場景提供解決方案。

安裝 ahooks

npm install ahooks

常用場景類 hooks 詳解

網絡請求場景 – useRequest

useRequest是 ahooks 中最核心的 hooks 之一,用于處理異步請求。

import React from "react";
import { useRequest } from "ahooks";const UserList = () => {const { data, loading, error, run } = useRequest(async () => {const response = await fetch("/api/users");return response.json();},{manual: true, // 手動觸發onSuccess: (result) => {console.log("請求成功:", result);},onError: (error) => {console.log("請求失敗:", error);},});return (<div><button onClick={run} disabled={loading}>{loading ? "加載中..." : "獲取用戶列表"}</button>{error && <div>錯誤: {error.message}</div>}{data && (<ul>{data.map((user) => (<li key={user.id}>{user.name}</li>))}</ul>)}</div>);
};

高級特性

// 輪詢請求
const { data } = useRequest(fetchUserData, {pollingInterval: 3000, // 每3秒輪詢一次pollingWhenHidden: false, // 頁面隱藏時停止輪詢
});// 防抖請求
const { data } = useRequest(searchUsers, {debounceWait: 500, // 500ms防抖
});// 緩存請求
const { data } = useRequest(fetchUserData, {cacheKey: "userData",staleTime: 5 * 60 * 1000, // 5分鐘內數據不重新請求
});

表單場景 – useAntdTable

useAntdTable用于處理表格與表單的聯動場景。

import React from "react";
import { useAntdTable } from "ahooks";
import { Form, Input, Button, Table } from "antd";const UserTable = () => {const [form] = Form.useForm();const { tableProps, search } = useAntdTable(async (params, form) => {const { current, pageSize } = params;const response = await fetch("/api/users", {method: "POST",body: JSON.stringify({page: current,size: pageSize,...form,}),});const data = await response.json();return {list: data.list,total: data.total,};},{form,defaultPageSize: 10,});return (<div className="container m-4"><Form form={form} layout="inline" className="mb-2"><Form.Item name="name" label="姓名"><Input placeholder="請輸入姓名" /></Form.Item><Form.Item name="email" label="郵箱"><Input placeholder="請輸入郵箱" /></Form.Item><Form.Item><Button type="primary" onClick={search.submit}>搜索</Button><Button onClick={search.reset} style={{ marginLeft: 8 }}>重置</Button></Form.Item></Form><Table{...tableProps}columns={[{ title: "姓名", dataIndex: "name" },{ title: "郵箱", dataIndex: "email" },{ title: "創建時間", dataIndex: "createTime" },]}/></div>);
};

狀態管理場景 – useLocalStorageState

useLocalStorageState用于在 localStorage 中持久化狀態。

import React from "react";
import { useLocalStorageState } from "ahooks";const ThemeSwitcher = () => {const [theme, setTheme] = useLocalStorageState("theme", {defaultValue: "light",serializer: (value) => JSON.stringify(value),deserializer: (value) => JSON.parse(value),});return (<div><p>當前主題: {theme}</p><button onClick={() => setTheme("light")}>淺色主題</button><button onClick={() => setTheme("dark")}>深色主題</button></div>);
};

生命周期場景 – useMount & useUnmount

import React from "react";
import { useMount, useUnmount } from "ahooks";const UserProfile = () => {useMount(() => {console.log("組件掛載,開始獲取用戶信息");// 初始化邏輯});useUnmount(() => {console.log("組件卸載,清理資源");// 清理邏輯});return <div>用戶信息</div>;
};

事件處理場景 – useEventListener

import React, { useState } from "react";
import { useEventListener } from "ahooks";const KeyboardListener = () => {const [key, setKey] = useState("");useEventListener("keydown", (event) => {setKey(event.key);});return (<div><p>按下的鍵: {key}</p></div>);
};

工具類場景 – useDebounce & useThrottle

import React, { useState } from "react";
import { useDebounce, useThrottle } from "ahooks";const SearchComponent = () => {const [value, setValue] = useState("");const debouncedValue = useDebounce(value, 500);const throttledValue = useThrottle(value, 1000);return (<div><inputvalue={value}onChange={(e) => setValue(e.target.value)}placeholder="輸入搜索內容"/><p>原始值: {value}</p><p>防抖值: {debouncedValue}</p><p>節流值: {throttledValue}</p></div>);
};

媒體查詢場景 – useResponsive

import React from "react";
import { useResponsive } from "ahooks";const ResponsiveComponent = () => {const responsive = useResponsive();return (<div><p>屏幕尺寸信息:</p><ul><li>xs: {responsive.xs ? "是" : "否"}</li><li>sm: {responsive.sm ? "是" : "否"}</li><li>md: {responsive.md ? "是" : "否"}</li><li>lg: {responsive.lg ? "是" : "否"}</li><li>xl: {responsive.xl ? "是" : "否"}</li></ul></div>);
};

滾動場景 – useScroll

import React from "react";
import { useScroll } from "ahooks";const ScrollComponent = () => {const scroll = useScroll(document);return (<div style={{ height: "200vh" }}><div style={{ position: "fixed", top: 0, left: 0 }}><p>滾動位置: {scroll?.left || 0}, {scroll?.top || 0}</p><p>滾動方向: {scroll?.direction || "none"}</p></div></div>);
};

總結

ahooks 的場景類 hooks 為 React 開發提供了強大的工具集,能夠顯著提升開發效率:

  1. useRequest: 處理異步請求的完整解決方案
  2. useFormTable: 表格與表單聯動的便捷工具
  3. useLocalStorageState: 狀態持久化
  4. useMount/useUnmount: 生命周期管理
  5. useEventListener: 事件監聽
  6. useDebounce/useThrottle: 性能優化
  7. useResponsive: 響應式設計
  8. useScroll: 滾動處理

通過合理使用這些 hooks,可以大大簡化 React 應用的開發復雜度,提高代碼的可維護性和用戶體驗。

?React強大且靈活hooks庫——ahooks入門實踐之場景類hooks(scene) - 高質量源碼分享平臺-免費下載各類網站源碼與模板及前沿動態資訊

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

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

相關文章

Qt常用控件之QWidget(一)

Qt常用控件之QWidget&#xff08;一&#xff09;1.QWidget2.enabled屬性2.geometry&#x1f31f;&#x1f31f;hello&#xff0c;各位讀者大大們你們好呀&#x1f31f;&#x1f31f; &#x1f680;&#x1f680;系列專欄&#xff1a;【Qt的學習】 &#x1f4dd;&#x1f4dd;本…

AIOT開發選型:行空板 K10 與 M10 適用場景與選型深度解析

前言 隨著人工智能和物聯網技術的飛速發展&#xff0c;越來越多的開發者、學生和愛好者投身于創意項目的構建。 在眾多的開發板中&#xff0c;行空板 K10 和 M10 以其獨特的優勢脫穎而出。 本文旨在為讀者提供一份詳盡的行空板 K10 和 M10 對比分析&#xff0c;從適用場景、…

redis匯總筆記

語雀完整版&#xff1a; https://www.yuque.com/g/mingrun/embiys/calwqx/collaborator/join?tokensLcLnqz5Rv8hOKEB&sourcedoc_collaborator# 《Redis筆記》 Redis 一般問題 Redis內存模型&#xff08;I/O多路模型&#xff09;多路復用IO如何解釋 為什么Redis要使用單線…

STM32用PWM驅動步進電機

硬件介紹&#xff1a;連線&#xff1a;注意這里stp連的是pwm脈沖&#xff0c;dir連的是方向到時候代碼pwm波形就是從這里來的&#xff0c;具體接線根據你的代碼來注意要點&#xff1a;步進電機和舵機驅動是不一樣的&#xff0c;它是根據步長來移動的&#xff0c;所以要開一個中…

力扣25.7.10每日一題——重新安排會議得到最多空余時間 II

Description 今天這道題和昨天類似&#xff0c;只是允許順序變化。 Solution 把會議區間視作桌子&#xff0c;空余時間視作空位&#xff0c;我們要把一個桌子移到別的空位中。 初步想法是枚舉桌子&#xff0c;找一個長度大于等于桌子長度的空位移過去。看上去&#xff0c;找…

IP報文分片與重組原理及實現分析

IP報文分片與重組原理及實現分析 引用&#xff1a; ppp/net/packet/IPFragment.hppp/net/packet/IPFragment.cpp 1. IP分片原理 當IP數據包大小超過MTU&#xff08;最大傳輸單元&#xff09;時&#xff0c;路由器/主機將其分割為多個片段傳輸&#xff0c;每個片段包含&…

[python]在drf中使用drf_spectacular

安裝drf_spectacular 文檔 pypi鏈接:https://pypi.org/project/drf-spectacular/ 文檔鏈接:https://drf-spectacular.readthedocs.io/en/latest/readme.html 安裝步驟 在環境中添加 pip install drf-spectacular在setting的INSTALLED_APPS中添加 INSTALLED_APPS [# ALL…

【Datawhale AI 夏令營】 用AI做帶貨視頻評論分析(二)

5.預訓練模型跑分 回顧賽題 回顧賽題任務 挑戰與難點&#xff1a; 標注數據少 ——> 半監督學習 or 數據增強 聚類分析噪點影響嚴重 回顧Baseline 問題&#xff1a; TF-IDF無法捕捉以下語義。聚類分析粗糙&#xff0c;未評估聚類質量。 提升方案&#xff1a; 分類任務…

SPSSPRO:數據分析市場SaaS挑戰者的戰略分析

目錄 第一部分&#xff1a;執行摘要 第二部分&#xff1a;平臺解構&#xff1a;產品、架構與用戶體驗 2.1 SaaS范式轉移&#xff1a;架構與起源 2.2 功能能力&#xff1a;分析師的工具箱 2.3 “智能分析”的價值主張 第三部分&#xff1a;市場滲透與受眾細分 3.1 目標用戶…

低版本hive(1.2.1)UDF實現清除歷史分區數據

目標&#xff1a;通過UDF實現對表歷史數據清除 入參&#xff1a;表名、保留天數N 一、pom文件 <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.…

C++中頂層const與底層const

在C中&#xff0c;const關鍵字用于定義常量&#xff0c;但它在指針和引用上下文中會產生兩種不同的常量性&#xff1a;頂層const&#xff08;top-level const&#xff09;和底層const&#xff08;low-level const&#xff09;。理解它們的區別是避免編譯錯誤和提高代碼質量的關…

“SRP模型+”多技術融合在生態環境脆弱性評價模型構建、時空格局演變分析與RSEI指數生態質量評價

集成云端、桌面端等環境&#xff0c;結合遙感云計算、GIS空間分析&#xff0c;R語言統計分析的優勢&#xff0c;以分析生態環境脆弱性的時空演變為主線。通過本課程的學習&#xff0c;您將掌握&#xff1a;第一&#xff0c;收集各類指標數據&#xff0c;構建的“生態壓力度-生態…

算法學習筆記:17.蒙特卡洛算法 ——從原理到實戰,涵蓋 LeetCode 與考研 408 例題

在計算機科學和數學領域&#xff0c;蒙特卡洛算法&#xff08;Monte Carlo Algorithm&#xff09;以其獨特的隨機抽樣思想&#xff0c;成為解決復雜問題的有力工具。從圓周率的計算到金融風險評估&#xff0c;從物理模擬到人工智能&#xff0c;蒙特卡洛算法都發揮著不可替代的作…

Tortoise 設置

如何關閉 Windows 下 TortoiseGit 任務欄里窗口標題的分支顯示 一、引言 TortoiseGit 是一個專為團隊協作設計的 Git 圖形化客戶端&#xff0c;旨在解決版本控制中常見的問題&#xff0c;如沖突、回滾、歷史查看等。本文檔是 TortoiseGit 的使用手冊前言部分&#xff0c;旨在向…

[論文閱讀] 人工智能 + 軟件工程 | AI助力軟件可解釋性:從用戶評論到自動生成需求與解釋

AI助力軟件可解釋性&#xff1a;從用戶評論到自動生成需求與解釋 Automatic Generation of Explainability Requirements and Software Explanations From User ReviewsarXiv:2507.07344 Automatic Generation of Explainability Requirements and Software Explanations From …

C語言---自定義類型(上)(結構體類型)

結構體結構體的定義與聲明結構體其實和數組一樣&#xff0c;都是一些值的集合&#xff0c;只不過數組是一系類相同類型的值&#xff0c;而結構體里邊的成員可以是不同的數據類型。關于它的聲明&#xff0c;所用到的關鍵字是struct。聲明的語法如下&#xff1a;struct 結構體名{…

Java觀察者模式實現方式與測試方法

一、實現方式 自定義實現 通過手動定義Subject和Observer接口&#xff0c;實現一對多依賴關系&#xff1a; // 觀察者接口 public interface Observer {void update(float temp, float humidity, float pressure); } // 主題接口 public interface Subject {void registerObser…

leetGPU解題筆記(1)

1.題面 題目要求 向量加法 實現一個程序&#xff0c;在GPU上對兩個包含32位浮點數的向量執行逐元素加法。該程序應接受兩個長度相等的輸入向量&#xff0c;并生成一個包含它們和的輸出向量。 實現要求 禁止使用外部庫 solve函數簽名必須保持不變 最終結果必須存儲在向量C中 示例…

5. JVM 的方法區

1. JVM介紹和運行流程-CSDN博客 2. 什么是程序計數器-CSDN博客 3. java 堆和 JVM 內存結構-CSDN博客 4. 虛擬機棧-CSDN博客 5. JVM 的方法區-CSDN博客 6. JVM直接內存-CSDN博客 7. JVM類加載器與雙親委派模型-CSDN博客 8. JVM類裝載的執行過程-CSDN博客 9. JVM垃圾回收…

網絡安全的基本練習

一.docker搭建 1.安裝dockerapt-get install docker.io docker-compose2.編寫配置文件&#xff08;注意路徑正確&#xff09;vim /etc/systemd/system/docker.service.d/http-proxy.conf[Service] Environment"HTTP_PROXYhttp://科學上網訪問的ip:端口" Environment&…