Реализация хука useWindowSize
Для начала откройте редактор. Вы можете увидеть следующие файлы в редакторе.
├── 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
, чтобы получить текущий размер окна.
- Откройте файл
useWindowSize.js
, расположенный в директории src/Hooks
.
- В этом файле импортируйте необходимые зависимости:
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
используется для создания переменной состояния windowSize
и функции setWindowSize
для ее обновления.
- Функция
changeWindowSize
определена для обновления состояния windowSize
при изменении размера окна.
- Хуки
useEffect
используется для добавления слушателя события resize
и удаления его при отмонтировании компонента.
- Объект
windowSize
возвращается из функции useWindowSize
.