【REACT18.x】CRA+TS+ANTD5.X封裝自定義的hooks復用業務功能

模擬react中的hooks方法,實現自定義的hooks來封裝我們需要重復使用的組件,來優化代碼。這種hooks也是利用了react的原生hooks來實現我們需要的特定業務,可以返回任何我們需要的值,也可以不返回值,作為一個副作用方法使用

第三方hooks

  • ahooks 官網地址 https://ahooks.js.org/zh-CN
    在這里插入圖片描述
  • react-use 文檔地址: https://github.com/streamich/react-use
    在這里插入圖片描述

下面,封裝了幾個自己的簡單hooks,加深下對hooks的理解

修改頁面標題

  • 實現效果
    在這里插入圖片描述

  • 實現代碼

import { useEffect } from 'react'export function useTitle(title: string): void {useEffect(() => {document.title = title}, [])
}

捕獲鼠標位置

  • 實現效果
    請添加圖片描述
  • 實現代碼
import { useCallback, useEffect } from 'react'
import { useImmer } from 'use-immer'type TPosition = {x: numbery: number
}function useMouse(): TPosition {const [position, setPosition] = useImmer<TPosition>({x: 0,y: 0})const updateMouse = useCallback((e: MouseEvent) => {console.log('useEffect updateMouse')setPosition(draft => {draft.x = e.clientXdraft.y = e.clientY})}, [])useEffect(() => {document.addEventListener('mousemove', updateMouse)return () => {document.removeEventListener('mousemove', updateMouse)}})return position
}export default useMouse

異步請求

  • 實現效果
    請添加圖片描述
  • 實現代碼
import { useEffect } from 'react'
import { useImmer } from 'use-immer'type TResult = {name: stringage: number
}
function getInfo(): Promise<TResult> {return new Promise(resolve => {setTimeout(() => {resolve({name: 'why',age: 18})}, 2000)})
}const useGetInfo = () => {const [loading, setLoading] = useImmer(false)const [info, setInfo] = useImmer<TResult | null>(null)useEffect(() => {setLoading(true)getInfo().then(result => {setInfo(result)setLoading(false)})}, [])return { loading, info }
}export default useGetInfo

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

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

相關文章

Vue CSR 到 Nuxt 3 SSR 遷移:技術實現與問題解決實錄

1. 遷移動機與技術選型1.1 CSR 架構的局限性 基于 Vue 3 和 Vite 構建的客戶端渲染 (CSR) 單頁應用 (SPA) 提供了良好的開發體驗和用戶交互流暢性。但是其核心局限在于&#xff1a;搜索引擎優化 (SEO)&#xff1a;初始 HTML 響應僅包含一個根 div 元素&#xff0c;實際內容由 J…

FastGPT + Kymo:解鎖企業專屬知識庫與智能體開發新體驗

在信息爆炸的時代&#xff0c;企業如何讓知識“活起來”&#xff1f;傳統文檔庫和搜索框早已無法滿足需求。FastGPT——基于RAG技術的開源知識庫系統&#xff0c;正重新定義企業級知識管理&#xff01; 一、FastGPT是什么&#xff1f; FastGPT是企業構建專屬知識庫的智能核心…

人形機器人_雙足行走動力學:Maxwell模型及在擬合肌腱特性中的應用

一、Maxwell模型及其在擬合肌腱特性中的應用Maxwell模型是經典的粘彈性力學模型之一&#xff0c;由彈簧&#xff08;彈性元件&#xff09;和阻尼器&#xff08;粘性元件&#xff09;串聯組成。其在生物力學領域的應用主要聚焦于材料的動態響應&#xff08;如應力松弛和蠕變&…

「iOS」——KVC

源碼學習iOS底層學習&#xff1a;KVC 底層原理一、核心 API 與功能特性**常用方法**KVC 設值 底層原理KVC 取值 底層原理自定義KVC設值取值**特性&#xff1a;無隱私訪問****原理**四、多元應用場景1. **動態數據處理**&#xff08;1&#xff09;字典轉模型&#xff08;2&#…

【Lucene】leafreadercontext邏輯段與segment物理磁盤段的關系

在 Lucene 中&#xff0c;“葉子段”&#xff08;LeafReaderContext&#xff09;和 “segment”&#xff08;物理段&#xff09;在 Lucene 語境下&#xff0c;LeafReaderContext ≈ segment 的運行時只讀視圖。概念 所在層次 含義 是否一一對應 segment 物理存儲層 Lucene 索引…

Python進階第三方庫之Matplotlib

應用Matplotlib的基本功能實現圖形顯示 應用Matplotlib實現多圖顯示 應用Matplotlib實現不同畫圖種類 1、什么是Matplotlib是專門用于開發2D圖表(包括3D圖表) 以漸進、交互式方式實現數據可視化 2、為什么要學習Matplotlib可視化是在整個數據挖掘的關鍵輔助工具&#xff0c;可以…

【深度解析】從AWS re_Invent 2025看云原生技術發展趨勢

2025 年 6 月 28 日 在科技浪潮持續翻涌的當下&#xff0c;云原生技術已然成為推動企業數字化轉型與創新發展的關鍵力量。而 AWS re:Invent 作為云計算領域一年一度的盛會&#xff0c;向來是展示前沿技術、洞察行業趨勢的重要舞臺。在今年的 AWS re:Invent 2025 大會上&#xf…

高亮標題里的某個關鍵字正則表達式

使用v-html渲染&#xff0c;寫一個高亮方法<span class"title-name" v-html"highlightKeywords(name, keywords)"></span>這里傳入的name帶了文件拓展名&#xff0c;所以先把名稱從文件名里提取出來// 高亮標題顏色highlightKeywords(name, ke…

視頻編解碼中colorspace,color_range,color_trc,color_primaries,是做什么用的,是誰來指定的

在視頻編解碼中&#xff0c;colorspace&#xff08;色彩空間&#xff09;、color_range&#xff08;色域范圍&#xff09;、color_trc&#xff08;傳輸特性&#xff09;、color_primaries&#xff08;原色&#xff09;是一組色彩相關元數據&#xff0c;它們共同決定了視頻的顏色…

【QT】 Qt背景介紹與概述

文章目錄&#x1f4dd;Qt背景介紹&#x1f320; 什么是Qt&#x1f309;Qt的發展史&#x1f320; Qt?持的平臺&#x1f309; Qt版本&#x1f309; Qt的優點&#x1f309; Qt的應?場景&#x1f320; Qt的成功案例&#x1f320; Qt的發展前景及就業分析&#x1f6a9;總結&#x…

如何將擁有的域名自定義鏈接到我的世界服務器(Minecraft服務器)

關于Dynadot Dynadot是通過ICANN認證的域名注冊商&#xff0c;自2002年成立以來&#xff0c;服務于全球108個國家和地區的客戶&#xff0c;為數以萬計的客戶提供簡潔&#xff0c;優惠&#xff0c;安全的域名注冊以及管理服務。 Dynadot平臺操作教程索引&#xff08;包括域名郵…

2025暑期—07深度學習應用-總結

人有自動選取卷積核的能力&#xff0c;傳統的圖像處理不能自動選取卷積核非線性作用函數&#xff0c;Sigmoid由于梯度消失使用Relu。卷積神經網絡的卷積核是未知的&#xff0c;自適應的。其中的權重是不斷變化的&#xff0c;就是卷積核是不斷變化的。卷積模糊了&#xff0c;池化…

數據結構-4(常用排序算法、二分查找)

一、思維導圖二、冒泡排序def bubble_sort(ls):"""用i循環,逐步比較相鄰元素,直到循環結束,停止交換&#xff0c;就像一個個氣泡從下往上冒泡,每一次的循環結果都是最大的元素到了后面已排序序列的列首。"""j 0 # 用于確定循環次數,同時用于下…

策略模式(Strategy Pattern)+ 模板方法模式(Template Method Pattern)的組合使用

using Microsoft.Extensions.DependencyInjection;namespace ConsoleApp9 {internal class Program{static async Task Main(string[] args){Console.WriteLine("Hello, World!");// 創建并配置依賴注入容器var _serviceProvider new ServiceCollection().AddScoped…

es0102---語法格式、數據類型、整合springboot、創建庫、創建映射、新增數據、自定義查詢

ES 一、創建映射字段的語法格式 需要先構建索引庫&#xff0c;在構建索引庫中的映射關系 PUT /索引庫名/_mapping {"properties": {"字段名": {"type": "類型","index": true&#xff0c;"store": false&#…

spring boot h2數據庫無法鏈接問題

spring boot h2數據庫無法鏈接問題datasource:# 數據庫連接地址&#xff1a;H2在2.x后&#xff0c;不再支持創建數據庫&#xff0c;需要手工創建&#xff0c;如&#xff1a;touch test.mv.db&#xff0c;# 否則會報“Database file not found”錯誤url: jdbc:h2:file:~/testdri…

pycharm配conda環境

最近在做表情包&#xff0c;畫出來的表情包大小不一&#xff0c;但是vx表情包平臺要求統一都是240*240的&#xff0c;所以用Pillow統一處理的一下。 如果你本地裝的python并且添加到path了&#xff0c;pycharm可以自動獲取到&#xff0c;但是我裝得miniconda&#xff0c;pychar…

【Elasticsearch】Elasticsearch 跨機房部署

《Elasticsearch 集群》系列&#xff0c;共包含以下文章&#xff1a; 1?? 冷熱集群架構2?? 合適的鍋炒合適的菜&#xff1a;性能與成本平衡原理公式解析3?? ILM&#xff08;Index Lifecycle Management&#xff09;策略詳解4?? Elasticsearch 跨機房部署5?? 快照與恢…

立式數控深孔鉆的工藝及光學檢測方法 —— 激光頻率梳 3D 輪廓檢測

引言立式數控深孔鉆作為深孔加工的關鍵設備&#xff0c;其工藝水平直接影響零件加工質量。深孔加工面臨排屑、散熱等挑戰&#xff0c;而光學檢測技術的發展為深孔加工精度控制提供了新途徑。激光頻率梳 3D 輪廓檢測技術與立式數控深孔鉆工藝的結合&#xff0c;實現了深孔加工與…

【YOLO系列】YOLOv4詳解:模型結構、損失函數、訓練方法及代碼實現

YOLOv4詳解&#xff1a;模型結構、損失函數、訓練方法及代碼實現 motivation YOLO系列作者Joseph Redmon與Alexey Bochkovskiy致力于解決目標檢測領域的核心矛盾&#xff1a;精度與速度的平衡。YOLOv4的誕生源于兩大需求&#xff1a; 工業落地&#xff1a;在移動端/邊緣設備…