Введение
В этом лабораторном задании мы изучим, как использовать хук useOnWindowScroll в React для выполнения обратного вызова при каждом скроллинге окна. Этот хук позволяет нам добавить слушатель скроллинга к глобальному объекту Window и удалить его при демонтировании компонента. Используя этот хук, мы можем легко добавить пользовательское поведение при скроллинге к нашим компонентам React.
Хук useOnWindowScroll в React
В ВМ уже предоставлены
index.htmlиscript.js. В общем, вам нужно только добавить код вscript.jsиstyle.css.
Эта функция выполняет обратный вызов каждый раз, когда окно прокручивается. Для его реализации:
- Используйте хук
useRef()для создания переменной ссылкиlistener. - Используйте хук
useEffect()иEventTarget.addEventListener()для прослушивания события'scroll'объектаWindowи назначения ссылки на слушательlistener.current. - Используйте
EventTarget.removeEventListener()для удаления любых существующих слушателей при демонтировании компонента.
Вот код:
const useOnWindowScroll = (callback) => {
const listener = React.useRef(null);
React.useEffect(() => {
if (listener.current) {
window.removeEventListener("scroll", listener.current);
}
listener.current = () => {
callback(window.pageYOffset);
};
window.addEventListener("scroll", listener.current);
return () => {
window.removeEventListener("scroll", listener.current);
};
}, [callback]);
};
Для тестирования функции вы можете использовать ее в компоненте так:
const App = () => {
useOnWindowScroll((scrollY) => console.log(`scroll Y: ${scrollY}`));
return <p style={{ height: "300vh" }}>Scroll and check the console</p>;
};
ReactDOM.render(<App />, document.getElementById("root"));
Это будет выводить вертикальную позицию прокрутки окна каждый раз, когда оно прокручивается.
Пожалуйста, нажмите кнопку 'Go Live' в нижнем правом углу, чтобы запустить веб-сервис на порту 8080. Затем вы можете обновить вкладку Web 8080, чтобы просмотреть веб-страницу.
Резюме
Поздравляем! Вы завершили лабораторную работу по хукy useOnWindowScroll в React. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.