Введение
В этом практическом занятии мы научимся создавать пользовательский React-хук под названием useOnWindowResize, который будет выполнять обратный вызов при любом изменении размеров окна. Мы будем использовать хуки useRef() и useEffect() для прослушивания события 'resize' глобального объекта Window и очистки ресурсов при размонтировании компонента. Этот хук может быть полезен для создания отзывчивых веб-приложений, которые должны адаптироваться к различным размерам экрана.
React-хук useOnWindowResize
В ВМ уже предоставлены
index.htmlиscript.js. В общем, вам нужно добавить код только вscript.jsиstyle.css.
Этот код выполняет функцию обратного вызова каждый раз при изменении размеров окна. Чтобы реализовать это, вы должны следовать шагам:
Создайте переменную под названием
listenerс использованием хукаuseRef(). Эта переменная будет хранить ссылку на слушателя.Используйте хук
useEffect()иEventTarget.addEventListener()для прослушивания события'resize'глобального объектаWindow. Когда событие срабатывает, вызовите функциюcallback.Очистите ресурсы, удалив любых существующих слушателей с помощью
EventTarget.removeEventListener(), когда компонент размонтируется.
Вот код:
const useOnWindowResize = (callback) => {
const listener = React.useRef(null);
React.useEffect(() => {
if (listener.current) {
window.removeEventListener("resize", listener.current);
}
listener.current = callback;
window.addEventListener("resize", callback);
return () => {
window.removeEventListener("resize", callback);
};
}, [callback]);
};
const App = () => {
useOnWindowResize(() =>
console.log(`Размер окна: (${window.innerWidth}, ${window.innerHeight})`)
);
return <p>Измените размер окна и проверьте консоль.</p>;
};
ReactDOM.createRoot(document.getElementById("root")).render(<App />);
Пожалуйста, нажмите кнопку 'Go Live' в нижнем правом углу, чтобы запустить веб-сервис на порту 8080. Затем вы можете обновить вкладку Web 8080, чтобы просмотреть веб-страницу.
Резюме
Поздравляем! Вы завершили практическое занятие по React-хуку useOnWindowResize. Вы можете выполнить больше практических занятий в LabEx, чтобы улучшить свои навыки.