網站首頁 編程語言 正文
-
什么是hook
Hook
是 React 16.8
的新增特性。它通常與函數式組件同時使用。可以使函數式組件在不編寫 class
的情況下,可以擁有class
組件的狀態、生命周期、引用等功能。
-
常用的有哪些hook
React
中常用的hooks
有:
-
useState
狀態管理 -
useEffect
生命周期 -
useContext
跨組件數據傳遞 -
useRef
組件引用 - ....
-
自定義hook
自定義hook
其實就是自定義函數,與我們寫函數組件非常類似。自定義的hook
組件的命名與系統的hooks
一樣,需要以use
開頭。下面我們用react+ts
就來介紹一下常用的幾個自定義hook
- 獲取窗口寬高變化
實現目標:通過 useWindowSize()
來實時獲取窗口的寬高
新建一個hook文件useWindowSize.ts
,代碼如下:
import { useEffect, useState } from "react"; //定義size對象 interface WindowSize { width: number, height: number } const useWindowSize = () => { const [size, setSize] = useState<WindowSize>({ width: document.documentElement.clientWidth, height: document.documentElement.clientHeight }) useEffect(() => { //監聽size變化 window.addEventListener('resize', () => { setSize({ width: document.documentElement.clientWidth, height: document.documentElement.clientHeight }) }) return () => { //組件銷毀時移除監聽 window.removeEventListener('resize', () => { setSize({ width: document.documentElement.clientWidth, height: document.documentElement.clientHeight }) }) } },[]) return size } export default useWindowSize
組件中這樣使用:
import useWindowSize from './hooks/useWindowSize'; function App() { const size = useWindowSize() return ( <div> <div>頁面寬度:{size.width}</div> <div>頁面高度:{size.height}</div> </div> ) } export default App
在瀏覽器拖動放大縮小時,頁面上的數據可動態變化
- 獲取滾動偏移量變化
目標:通過 useWindowScroll()
來實時獲取頁面的滾動偏移量
新建一個hook文件useWindowScroll.ts
,代碼如下:
import { useEffect, useState } from "react" //定義偏移量對象 interface ScrollOffset { x: number, y: number } const useWindowScroll = () => { const [off, setOff] = useState<ScrollOffset>({ x: window.scrollX, y: window.scrollY }) useEffect(() => { //監聽 window.addEventListener('scroll', () => { setOff({ x: window.scrollX, y: window.scrollY }) }) return () => { //移除監聽 window.removeEventListener('scroll', () => { setOff({ x: window.scrollX, y: window.scrollY }) }) } }) return off } export default useWindowScroll
組件中這樣使用:
import useWindowScroll from './hooks/useWindowScroll'; function App() { const offSet = useWindowScroll() return ( <div style={{height: '10000px', width: '10000px'}}> <div>滾動y:{offSet.y}</div> <div>滾動x:{offSet.x}</div> </div> ) } export default App
- 自動同步至localStorage
目標:通過 const [value, setValue] = useLocalStorage('key', 'value')
可以傳入默認的初始value和key,且每次修改value可以自動同步到localStorage中
新建一個hook類useLocalStorage
,代碼如下:
import { useEffect, useState } from "react" const useLocalStorage = (key: string, defaultValue: string) : ([string, React.Dispatch<React.SetStateAction<string>>]) => { const [value, setValue] = useState(defaultValue) useEffect(() => { window.localStorage.setItem(key, value) },[key, value]) return [value, setValue] } export default useLocalStorage
組件中使用:
import useLocalStorage from './hooks/useLocalStorage'; function App() { const [value, setValue] = useLocalStorage('key', 'react') return ( <div> <button onClick={() => { //點擊修改value,會自動同步至本地 setValue('vue') }}>點擊</button> <div>{ value }</div> </div> ) } export default App
原文鏈接:https://juejin.cn/post/7112379023761604616
- 上一篇:WPF中的導航框架概述_C#教程
- 下一篇:C++關于樹的定義全面梳理_C 語言
相關推薦
- 2022-01-16 npm:使用npm link來調試本地的包
- 2023-01-08 簡化Cocos和Native交互利器詳解_React
- 2022-09-23 win11下FTP服務器搭建圖文教程_FTP服務器
- 2022-03-30 C#算法之回文數_C#教程
- 2022-08-07 Android?實現自定義折線圖控件_Android
- 2022-03-16 C++?NFS掛載及掛載命令_C 語言
- 2022-12-23 C++中關于getchar()的使用方法_C 語言
- 2023-03-25 Android?Jetpack組件ViewModel基本用法詳解_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支