实现 useWindowSize Hook
首先,打开编辑器。你可以在编辑器中看到以下文件。
├── package-lock.json
├── package.json
├── public
│ ├── index.html
│ └── robots.txt
└── src
├── App.css
├── App.js
├── hooks
│ └── useWindowSize.js
├── index.css
├── index.js
├── reportWebVitals.js
└── setupTests.js
在这一步中,你将学习如何实现 useWindowSize 自定义 Hook 来获取当前窗口大小。
- 打开位于
src/Hooks 目录下的 useWindowSize.js 文件。
- 在这个文件中,导入必要的依赖项:
import { useEffect, useState } from "react";
- 定义
useWindowSize 函数:
import { useEffect, useState } from "react";
export const useWindowSize = () => {
const [windowSize, setWindowSize] = useState({
width: window.innerWidth,
height: window.innerHeight
});
const changeWindowSize = () => {
setWindowSize({ width: window.innerWidth, height: window.innerHeight });
};
useEffect(() => {
window.addEventListener("resize", changeWindowSize);
return () => {
window.removeEventListener("resize", changeWindowSize);
};
}, []);
return windowSize;
};
解释:
useWindowSize 函数返回一个包含当前窗口宽度和高度的对象。
useState Hook 用于创建一个状态变量 windowSize 和一个用于更新它的函数 setWindowSize。
changeWindowSize 函数用于在窗口大小改变时更新 windowSize 状态。
useEffect Hook 用于添加一个 resize 事件的监听器,并在组件卸载时移除它。
windowSize 对象从 useWindowSize 函数返回。