Введение
В этом проекте вы научитесь создавать пользовательский React-хук под названием useWindowSize, чтобы получить текущий размер окна и использовать его для условного рендеринга панели навигации в веб-приложении.
👀 Предпросмотр

🎯 Задачи
В этом проекте вы научитесь:
- Реализовать пользовательский хук
useWindowSize, чтобы получить текущий размер окна - Использовать хук
useWindowSizeв компонентеApp, чтобы обновить панель навигации в зависимости от ширины окна
🏆 Достижения
После завершения этого проекта вы сможете:
- Создать пользовательский React-хук для encapsulation повторно используемой функциональности
- Использовать хуки
useStateиuseEffectдля управления состоянием и побочными эффектами - Условно рендерить компоненты в зависимости от текущего размера окна
Реализуйте хук 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.
Тестируйте приложение
- Сохраните файл
useWindowSize.js. - Загрузите зависимости с помощью команды
npm installв терминале, подождите, пока зависимости будут загружены, а затем запустите проект с помощью командыnpm start. - Как только проект успешно запустится, нажмите на "Web 8080", чтобы просмотреть его в браузере.
- Эффект заключается в том, что при изменении размера окна пользователем нижний контент будет отображать ширину окна, а верхняя панель навигации будет скрывать два подменю на маленьких экранах и показывать три меню на больших экранах.

Поздравляем! Вы успешно реализовали хук useWindowSize и использовали его в компоненте App для обновления панели навигации в зависимости от размера окна.
Резюме
Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.



