当前位置: 首页 > news >正文

【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.dtcms.com/a/295522.html

相关文章:

  • 初识opencv03——图像预处理2
  • C++vector(2)
  • TreeMap一致性哈希环设计与实现 —— 高可用的数据分布引擎
  • 【RAG优化】RAG应用中图文表格混合内容的终极检索与生成策略
  • 【AI】Jupyterlab中打开文件夹的方式
  • 元宇宙工厂网页新形态:3D场景嵌入与WebGL交互的轻量化实现
  • MySQL 表的操作
  • 奇异值分解(Singular Value Decomposition, SVD)
  • 武汉火影数字|数字党建展厅制作 VR红色数字纪念馆 党史馆数字化打造
  • Windows 10 远程桌面(RDP)防暴力破解脚本
  • Linux内核中动态内存分配函数解析
  • 滑动窗口机制及其应用
  • 云渲染的算力困局与架构重构:一场正在发生的生产力革命
  • Apache POI 实战应用:企业级文档处理解决方案
  • 5.7 input子系统
  • uboot FPGA调试环境搭建
  • C++ <多态>详解:从概念到底层实现
  • 不同头会关注输入序列中不同的部分和不同维度所蕴含的信息,这里的头和嵌入维度不是对应的,仅仅是概念上的吗?
  • 在Ubuntu上使用QEMU学习RISC-V程序(1)起步第一个程序
  • 负载均衡-LoadBalance
  • YOLOv4深度解析:革命性的实时目标检测技术
  • 基于Zig语言,opencv相关的c++程序静态交叉编译
  • USRP X440
  • Vulnhub Web-Machine-N7靶机攻略(附VB安装教程)
  • Docker快速安装Clickhouse
  • Vue 项目中的组件引用如何实现,依赖组件间的数据功能交互及示例演示
  • OpenLayers 综合案例-基础图层控制
  • 解密 Base64 编码:从原理到应用的全面解析
  • 前端实现 excel 数据导出,封装方法支持一次导出多个Sheet
  • Effective Python 第16条:用get处理字典缺失键,避免in与KeyError的陷阱