自定义Hooks获取窗口大小
新建一个文件Example.js
,然后编写一个useWinSize
,编写时我们会用到useState
、useEffect
和useCallback
所以先用import
进行引入。然后编写函数,函数中先用useState
设置size
状态,然后编写一个每次修改状态的方法onResize
,这个方法使用useCallback
,目的是为了缓存方法(useMemo
是为了缓存变量)。 然后在第一次进入方法时用useEffect
来注册resize
监听时间。为了防止一直监听所以在方法移除时,使用return
的方式移除监听。最后返回size
变量就可以了。
import React, { useState ,useEffect ,useCallback } from 'react';
function useWinSize(){
const [ size , setSize] = useState({
width:document.documentElement.clientWidth,
height:document.documentElement.clientHeight
})
const onResize = useCallback(()=>{
setSize({
width: document.documentElement.clientWidth,
height: document.documentElement.clientHeight
})
},[])
useEffect(()=>{
window.addEventListener('resize',onResize)
return ()=>{
window.removeEventListener('resize',onResize)
}
},[])
return size;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
自定义Hooks函数已经写好了,可以直接进行使用,用法和JavaScript的普通函数用起来是一样的,例如:
function Example(){
const size = useWinSize()
return (
<div>页面Size:{size.width}x{size.height}</div>
)
}
export default Example
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
之后就可以在浏览器中预览一下结果,可以看到当我们放大缩小浏览器窗口时,页面上的结果都会跟着进行变化。
上次更新: 2024/01/30, 00:35:17
- 01
- linux 在没有 sudo 权限下安装 Ollama 框架12-23
- 02
- Express 与 vue3 使用 sse 实现消息推送(长连接)12-20