目录什么是hook常用的有哪些hook自定义hook什么是hook Hook是 React 16.8 的新增特性。它通常与函数式组件同时使用。可以使函数式组件在不编写 class 的
Hook
是 React 16.8
的新增特性。它通常与函数式组件同时使用。可以使函数式组件在不编写 class
的情况下,可以拥有class
组件的状态、生命周期、引用等功能。
React
中常用的hooks
有:
useState
状态管理useEffect
生命周期useContext
跨组件数据传递useRef
组件引用自定义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
目标:通过 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
到此这篇关于React自定义hook的文章就介绍到这了,更多相关React自定义hook内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: React自定义hook的方法
本文链接: https://lsjlt.com/news/152580.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-01-12
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0