ahooks.js:一款強大的React Hooks庫及其API使用教程(一)

    • 一、ahooks.js簡介
    • 二、ahooks.js安裝
    • 三、ahooks.js API介紹與使用教程
      • 1. useRequest
      • 2. useAntdTable
      • 3. useSize
      • 4. useBoolean
      • 5. useToggle
      • 6. useHover
      • 7. useDebounce
      • 8. useEventListener
      • 9. useFusionTable
      • 10. useKeyPress
      • 11. useLoading
      • 12. usePrevious
      • 13. useForm
      • 14. useUpdate
      • 15. useUnmount
      • 16. useThrottle
      • 17. useToggle
      • 18. useUpdateEffect
      • 19. useWhyDidYouUpdate
      • 20.useInterval

一、ahooks.js簡介

ahooks是一款由阿里巴巴開發團隊設計的React Hooks庫,提供了一系列實用的React Hooks,以便開發者更好地使用React的功能。ahooks的設計原則是“最小API,最大自由”,旨在提供最小的、最易于理解和使用的API,同時保留最大的使用自由度。

二、ahooks.js安裝

使用npm或yarn安裝ahooks:

npm install ahooks
# 或者
yarn add ahooks

三、ahooks.js API介紹與使用教程

1. useRequest

useRequest是ahooks中最常用的一個API,它用于處理異步請求和其相關狀態。

import { useRequest } from 'ahooks';
import axios from 'axios';function App() {const { data, error, loading } = useRequest(() => axios.get('https://api.example.com'));if (loading) {return <div>Loading...</div>;}if (error) {return <div>Error: {error.message}</div>;}return <div>{data}</div>;
}

在上述代碼中,useRequest接收一個函數作為參數,該函數返回一個Promise。useRequest會自動處理loading和error狀態,使得你可以更專注于業務邏輯。

2. useAntdTable

useAntdTable是一個與Ant Design Table配合使用的Hook,它可以幫助你快速創建一個具有分頁、排序和篩選功能的表格。

import { useAntdTable } from 'ahooks';
import { Table } from 'antd';const getTableData = ({ current, pageSize }) => {// 這是一個示例API,你應該替換為你的實際APIconst api = `https://api.example.com?page=${current}&size=${pageSize}`;return axios.get(api);
};function App() {const { tableProps, search } = useAntdTable(getTableData, { defaultPageSize: 5 });const { type, changeType, submit, reset } = search;return (<><Table {...tableProps} rowKey="id" /></>);
}

在上述代碼中,useAntdTable接收一個獲取表格數據的函數和一些配置作為參數。getTableData函數應該返回一個Promise,該Promise解析為{ list: [], total: 0 }的格式。

3. useSize

useSize是一個用于獲取元素尺寸的Hook。

import { useSize } from 'ahooks';function App() {const [size, ref] = useSize();return (<div ref={ref}>width: {size.width}px, height: {size.height}px</div>);
}

在上述代碼中,useSize返回一個數組,第一個元素是尺寸對象,第二個元素是需要測量尺寸的元素的ref。

4. useBoolean

useBoolean 是一個用于處理布爾值狀態的 Hook。它返回一個數組,包含一個布爾值和一些操作這個值的函數。

import { useBoolean } from 'ahooks';function App() {const [state, { toggle, setTrue, setFalse }] = useBoolean(false);return (<div><p>{`狀態: ${state}`}</p><button onClick={toggle}>切換</button><button onClick={setTrue}>設為真</button><button onClick={setFalse}>設為假</button></div>);
}

在上述代碼中,useBoolean 接收一個初始值作為參數(默認為 false),返回一個數組。數組的第一個元素是當前的布爾值,第二個元素是一個對象,包含 togglesetTruesetFalse 三個函數,用于改變布爾值的狀態。

5. useToggle

useToggle 是一個用于在兩個值之間切換的 Hook。它返回一個數組,包含當前的值和一個切換函數。

import { useToggle } from 'ahooks';function App() {const [state, { toggle }] = useToggle('Hello', 'World');return (<div><p>{state}</p><button onClick={toggle}>切換</button></div>);
}

在上述代碼中,useToggle 接收兩個參數,返回一個數組。數組的第一個元素是當前的值,第二個元素是一個對象,包含一個 toggle 函數,用于在兩個值之間切換。

6. useHover

useHover 是一個用于追蹤元素 hover 狀態的 Hook。它返回一個數組,包含當前的 hover 狀態和一個 ref。

import { useHover } from 'ahooks';function App() {const [isHovering, hoverRef] = useHover();return (<div ref={hoverRef}>{isHovering ? '正在懸停' : '未懸停'}</div>);
}

在上述代碼中,useHover 返回一個數組。數組的第一個元素是一個布爾值,表示當前元素是否正在被懸停,第二個元素是一個 ref,需要被賦給需要追蹤 hover 狀態的元素。

對不起,我理解錯了你的要求。讓我們按照你的要求,從第七個開始介紹,并提供代碼示例和解釋。

7. useDebounce

useDebounce 是一個用于防抖動操作的 Hook,它可以幫助我們控制某些頻繁觸發的操作。

import { useDebounce } from 'ahooks';
import { useState } from 'react';function App() {const [value, setValue] = useState('');const debouncedValue = useDebounce(value, { wait: 500 });return (<div><inputvalue={value}onChange={(e) => setValue(e.target.value)}placeholder="Typed value"style={{ width: 280, marginRight: 16 }}/><p>Debounced Value: {debouncedValue}</p></div>);
}

在上述代碼中,useDebounce 接收兩個參數。第一個參數是需要防抖的值,第二個參數是一個配置對象,其中的 wait 屬性用于設置防抖延遲的時間。useDebounce 返回一個新的值,這個值會在指定的延遲時間后更新。

8. useEventListener

useEventListener 是一個用于添加事件監聽器的 Hook。

import { useEventListener } from 'ahooks';function App() {useEventListener('click', () => {console.log('document clicked');});return <div>Hello World</div>;
}

在上述代碼中,useEventListener 接收兩個參數。第一個參數是需要監聽的事件類型,例如 ‘click’、‘keydown’ 等。第二個參數是事件觸發時的回調函數。這個 Hook 會在組件掛載時添加事件監聽器,并在組件卸載時自動移除。

9. useFusionTable

useFusionTable 是一個用于處理表格數據的 Hook。

import { useFusionTable } from 'ahooks';function App() {const { tableProps, search } = useFusionTable(getTableData, {defaultPageSize: 5,});return (<Table {...tableProps} rowKey="id" />);
}

在上述代碼中,useFusionTable 接收兩個參數。第一個參數是一個獲取表格數據的函數,第二個參數是一個配置對象,可以設置默認的頁大小等。useFusionTable 返回一個對象,其中包含 tablePropssearch,分別用于控制表格的屬性和搜索功能。

10. useKeyPress

useKeyPress 是一個用于監聽鍵盤按鍵的 Hook。

import { useKeyPress } from 'ahooks';function App() {const isPressingA = useKeyPress('a');return <div>{isPressingA ? 'You are pressing A' : 'Not pressing A'}</div>;
}

在上述代碼中,useKeyPress 接收一個參數,即需要監聽的按鍵。它返回一個布爾值,表示該按鍵是否正在被按下。

11. useLoading

useLoading 是一個用于顯示加載狀態的 Hook。

import { useLoading } from 'ahooks';function App() {const [isLoading, { startLoading, endLoading }] = useLoading();return (<div>{isLoading ? 'Loading...' : 'Not Loading'}<button onClick={startLoading}>Start Loading</button><button onClick={endLoading}>End Loading</button></div>);
}

在上述代碼中,useLoading 不需要接收任何參數,它返回一個數組。數組的第一個元素是一個布爾值,表示是否正在加載。第二個元素是一個對象,包含 startLoadingendLoading 方法,用于控制加載狀態。

12. usePrevious

usePrevious 是一個用于獲取前一個狀態的 Hook。

import { usePrevious } from 'ahooks';
import { useState } from 'react';function App() {const [count, setCount] = useState(0);const previousCount = usePrevious(count);return (<div><p>Current Count: {count}</p><p>Previous Count: {previousCount}</p><button onClick={() => setCount(count + 1)}>Increase</button></div>);
}

在上述代碼中,usePrevious 接收一個參數,即當前的狀態值。它返回前一個狀態的值。

13. useForm

useForm 是一個用于處理表單數據雙向綁定的 Hook。

import { useForm } from 'ahooks';function App() {const { form, setForm, reset } = useForm();const handleSubmit = () => {// 處理表單提交邏輯console.log(form);};return (<div><inputtype="text"value={form.name}onChange={(e) => setForm({ ...form, name: e.target.value })}/><inputtype="text"value={form.email}onChange={(e) => setForm({ ...form, email: e.target.value })}/><button onClick={handleSubmit}>提交</button><button onClick={reset}>重置</button></div>);
}

在上述代碼中,我們使用 useForm 創建一個表單對象。它返回一個包含 formsetFormreset 的對象。

  • form 是一個表示表單數據的對象,可以通過 form.nameform.email 來訪問表單字段的值。
  • setForm 是一個函數,用于更新表單數據。在輸入框的 onChange 事件中,我們使用 setForm 來更新相應字段的值。
  • reset 是一個函數,用于重置表單數據為初始狀態。

通過使用 useForm,我們可以輕松地實現表單數據的雙向綁定,并處理表單提交和重置的邏輯。

14. useUpdate

useUpdate 是一個用于強制更新組件的 Hook。

import { useUpdate } from 'ahooks';function App() {const update = useUpdate();return (<div>Current Time: {Date.now()}<button onClick={update}>Update</button></div>);
}

在上述代碼中,useUpdate 不需要接收任何參數,它返回一個函數。調用這個函數可以強制更新組件。

15. useUnmount

useUnmount 是一個用于處理組件卸載時的邏輯的 Hook。

import { useUnmount } from 'ahooks';function App() {useUnmount(() => {console.log('Component is unmounting');});return <div>Hello World</div>;
}

在上述代碼中,useUnmount 接收一個函數作為參數,這個函數將在組件卸載時被調用。

16. useThrottle

useThrottle 是一個用于實現節流操作的 Hook。

import { useThrottle } from 'ahooks';
import { useState } from 'react';function App() {const [value, setValue] = useState('');const throttledValue = useThrottle(value, { wait: 500 });return (<div><inputvalue={value}onChange={(e) => setValue(e.target.value)}placeholder="Typed value"style={{ width: 280, marginRight: 16 }}/><p>Throttled Value: {throttledValue}</p></div>);
}

在上述代碼中,useThrottle 接收兩個參數。第一個參數是需要節流的值,第二個參數是一個配置對象,其中的 wait 屬性用于設置節流的時間。useThrottle 返回一個新的值,這個值會在指定的時間間隔內最多改變一次。

17. useToggle

useToggle 是一個用于切換布爾值的 Hook。

import { useToggle } from 'ahooks';function App() {const [state, { toggle }] = useToggle();return (<div><p>State: {state ? 'ON' : 'OFF'}</p><button onClick={toggle}>Toggle</button></div>);
}

在上述代碼中,useToggle 返回一個數組。數組的第一個元素是當前的狀態,第二個元素是一個對象,包含 toggle 方法,用于切換狀態。

18. useUpdateEffect

useUpdateEffect 是一個用于處理組件更新時的邏輯的 Hook。

import { useUpdateEffect } from 'ahooks';
import { useState } from 'react';function App() {const [count, setCount] = useState(0);useUpdateEffect(() => {console.log('Count has changed');}, [count]);return (<div><p>Count: {count}</p><button onClick={() => setCount(count + 1)}>Increase</button></div>);
}

在上述代碼中,useUpdateEffect 接收兩個參數。第一個參數是一個函數,這個函數將在依賴項更新時被調用。第二個參數是一個依賴項數組。

19. useWhyDidYouUpdate

useWhyDidYouUpdate 是一個用于跟蹤組件更新原因的 Hook。

import { useWhyDidYouUpdate } from 'ahooks';
import { useState } from 'react';function App(props) {useWhyDidYouUpdate('App', props);const [count, setCount] = useState(0);return (<div><p>Count: {count}</p><button onClick={() => setCount(count + 1)}>Increase</button></div>);
}

在上述代碼中,useWhyDidYouUpdate 接收兩個參數。第一個參數是組件的名字,第二個參數是組件的 props。這個 Hook 會在組件更新時打印出更新的原因。

當然,讓我們繼續介紹一個 API:useInterval

20.useInterval

useInterval 是一個用于設置定時器的 Hook。

import { useInterval } from 'ahooks';
import { useState } from 'react';function App() {const [count, setCount] = useState(0);useInterval(() => {setCount(count + 1);}, 1000);return <div>Count: {count}</div>;
}

在上述代碼中,useInterval 接收兩個參數。第一個參數是一個函數,這個函數將在指定的間隔時間被調用。第二個參數是間隔時間,單位是毫秒。

這個 Hook 會在組件掛載時開始定時器,并在組件卸載時自動清除定時器。所以你不需要手動管理定時器的生命周期。

更多關于ahooks.js的API介紹,請查看專欄:ahooks.js:一款強大的React Hooks庫

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

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

相關文章

代碼審計-ASP.NET項目-未授權訪問漏洞

代碼審計必備知識點&#xff1a; 1、代碼審計開始前準備&#xff1a; 環境搭建使用&#xff0c;工具插件安裝使用&#xff0c;掌握各種漏洞原理及利用,代碼開發類知識點。 2、代碼審計前信息收集&#xff1a; 審計目標的程序名&#xff0c;版本&#xff0c;當前環境(系統,中間件…

Flink源碼之State創建流程

StreamOperatorStateHandler 在StreamTask啟動初始化時通過StreamTaskStateInitializerImpl::streamOperatorStateContext會為每個StreamOperator 創建keyedStatedBackend和operatorStateBackend&#xff0c;在AbstractStreamOperator中有個StreamOperatorStateHandler成員變量…

Web framework-Gin

一、Gin Go Web--Go Module 軟件框架&#xff08;software framework&#xff09;&#xff0c;通常指的是為了實現某個業界標準或完成特定基本任務的軟件組件規范&#xff0c;也指為了實現某個軟件組件規范時&#xff0c;提供規范所要求之基礎功能的軟件產品。 框架就是&#…

機器學習|Softmax 回歸的數學理解及代碼解析

機器學習&#xff5c;Softmax 回歸的數學理解及代碼解析 Softmax 回歸是一種常用的多類別分類算法&#xff0c;適用于將輸入向量映射到多個類別的概率分布。在本文中&#xff0c;我們將深入探討 Softmax 回歸的數學原理&#xff0c;并提供 Python 示例代碼幫助讀者更好地理解和…

HarmonyOS NEXT新能力,一站式高效開發HarmonyOS應用

2023年8月6日華為開發者大會2023&#xff08;HDC.Together&#xff09;圓滿收官&#xff0c;伴隨著HarmonyOS 4的發布&#xff0c;華為向開發者發布了匯聚所有最新開發能力的HarmonyOS NEXT開發者預覽版&#xff0c;并分享了圍繞“一次開發&#xff0c;多端部署” “可分可合&a…

代碼隨想錄算法訓練營第60天|動態規劃part17| 647. 回文子串、516.最長回文子序列、動態規劃總結篇

代碼隨想錄算法訓練營第60天&#xff5c;動態規劃part17&#xff5c; 647. 回文子串、516.最長回文子序列、動態規劃總結篇 647. 回文子串 647. 回文子串 思路&#xff1a; 暴力解法 兩層for循環&#xff0c;遍歷區間起始位置和終止位置&#xff0c;然后還需要一層遍歷判斷…

【mysql】—— 表的增刪改查

目錄 序言 &#xff08;一&#xff09;Create操作 1、單行數據 全列插入 2、多行數據 指定列插入 3、插入否則更新 4、直接替換 &#xff08;二&#xff09;Retrieve操作 1、SELECT 列 1??全列查詢 2??指定列查詢 3??查詢字段為表達式 4??為查詢結果指定…

數據結構——堆

數據結構——堆 堆堆簡介堆的分類 二叉堆過程插入操作 刪除操作向下調整&#xff1a; 增加某個點的權值實現參考代碼&#xff1a;建堆方法一&#xff1a;使用 decreasekey&#xff08;即&#xff0c;向上調整&#xff09;方法二&#xff1a;使用向下調整 應用對頂堆 其他&#…

Python Flask+Echarts+sklearn+MySQL(評論情感分析、用戶推薦、BI報表)項目分享

Python FlaskEchartssklearnMySQL(評論情感分析、用戶推薦、BI報表)項目分享 項目背景&#xff1a; 隨著互聯網的快速發展和智能手機的普及&#xff0c;人們越來越傾向于在網上查找餐廳、購物中心、酒店和旅游景點等商戶的點評和評分信息&#xff0c;以便做出更好的消費決策。…

YOLOv8 : 網絡結構

一. YOLOv8網絡結構 1. Backbone YOLOv8的Backbone同樣參考了CSPDarkNet-53網絡&#xff0c;我們可以稱之為CSPDarkNet結構吧&#xff0c;與YOLOv5不同的是&#xff0c;YOLOv8使用C2f(CSPLayer_2Conv)代替了C3模塊(如果你比較熟悉YOLOv5的網絡結構&#xff0c;那YOLOv8的網絡…

【GitHub】Pycharm本地項目打包上傳到Github倉庫的操作步驟

文章目錄 1、Pycharm端的設置操作2、Github端的設置操作3、Pycharm上配置Github4、Git本地項目至GitHub倉庫5、前往Github中查看確認6、常見報錯 1、Pycharm端的設置操作 通過CtrlAltS快捷組合鍵的方式&#xff0c;打開設置&#xff0c;導航到版本控制一欄中的Git&#xff0c;…

Gin安裝解決國內go 與 熱加載

get 方式安裝超時問題&#xff0c;國內直接用官網推薦的下面這個命令大概率是安裝不成功的 go get -u github.com/gin-gonic/gin 可以在你的項目目錄下執行下面幾個命令&#xff1a; 比如我的項目在E:\Oproject\zl cmd E:\Oproject\zl>就在目錄下執行 go env -w GO111…

回歸預測 | MATLAB實現GRU門控循環單元多輸入多輸出

回歸預測 | MATLAB實現GRU門控循環單元多輸入多輸出 目錄 回歸預測 | MATLAB實現GRU門控循環單元多輸入多輸出預測效果基本介紹程序設計往期精彩參考資料 預測效果 基本介紹 MATLAB實現GRU門控循環單元多輸入多輸出&#xff0c;數據為多輸入多輸出預測數據&#xff0c;輸入10個…

pytorch安裝VAE項目詳解

安裝VAE項目 一、 基本環境二、代碼來源三、搭建conda環境四、下載數據集五、啟動項目六、其他相關問題 一、 基本環境 工具版本號OSwin 11pycharm2020.1GPU3050 二、代碼來源 github地址為&#xff1a; https://github.com/AntixK/PyTorch-VAE/blob/8700d245a9735640dda458d…

ZooKeeper的應用場景(集群管理、Master選舉)

5 集群管理 隨著分布式系統規模的日益擴大&#xff0c;集群中的機器規模也隨之變大&#xff0c;因此&#xff0c;如何更好地進行集群管理也顯得越來越重要了。 所謂集群管理&#xff0c;包括集群監控與集群控制兩大塊&#xff0c;前者側重對集群運行時狀態的收集&#xff0c;后…

08 - 追加commit和修改最新的commit message

查看所有文章鏈接&#xff1a;&#xff08;更新中&#xff09;GIT常用場景- 目錄 文章目錄 1. 追加提交2. 修改最新的commit message 1. 追加提交 將改動追加到上一次的commit 現在我已經修改了Readme文件并且已經add、commit操作&#xff0c;但是還沒有push到遠程倉庫&#x…

【左神算法刷題班】第17節:在有序二維數組中查找目標值、等于目標字符串的子序列個數

第17節 題目1&#xff1a;在有序二維數組中查找目標值 給定一個每一行有序、每一列也有序&#xff0c;整體可能無序的二維數組 再給定一個數num&#xff0c; 返回二維數組中有沒有num這個數 例子 數組如下&#xff0c;找 6 是否存在。 1 3 5 7 2 4 6 13 3 9 14 …

“心理健康人工智能產學研創新聯盟”揭牌成立|深蘭科技

8月14日上午&#xff0c;“2023樹洞救援年會”在上海舉行&#xff0c;會上舉行了“心理健康人工智能產學研創新聯盟”的簽約和揭牌儀式。“樹洞行動救援團”創始人深蘭科技科學院智能科學首席科學家、荷蘭阿姆斯特丹自由大學人工智能系終身教授黃智生&#xff0c;深蘭科技集團創…

華納云:ubuntu啟動寶塔的方法是什么

要在Ubuntu上啟動寶塔面板&#xff08;BT Panel&#xff09;&#xff0c;請按照以下步驟操作&#xff1a; 下載并安裝寶塔面板&#xff1a; 在終端中執行以下命令&#xff0c;以下載并運行寶塔面板的安裝腳本&#xff1a; sudo su wget -O install.sh http://download.bt.c…

Git 常用操作

一、Git 常用操作 1、Git 切換分支 git checkout命令可以用于三種不同的實體&#xff1a;文件&#xff0c;commit&#xff0c;以及分支。checkout的意思就是對于一種實體的不同版本之間進行切換的操作。checkout一個分支&#xff0c;會更新當前的工作空間中的文件&#xff0c;…