Introdução
Neste laboratório, exploraremos como usar o hook useOnWindowScroll em React para executar um callback sempre que a janela for rolada. Este hook nos permite adicionar um listener de rolagem ao objeto global Window e removê-lo quando o componente é desmontado. Ao usar este hook, podemos facilmente adicionar comportamento de rolagem personalizado aos nossos componentes React.
React useOnWindowScroll Hook
index.htmlescript.jsjá foram fornecidos na VM. Em geral, você só precisa adicionar código ascript.jsestyle.css.
Esta função executa uma função de callback toda vez que a janela é rolada. Para implementá-la:
- Use o hook
useRef()para criar uma variável de referência,listener. - Use o hook
useEffect()eEventTarget.addEventListener()para ouvir o evento'scroll'do objetoWindowe atribuir a referência do listener alistener.current. - Use
EventTarget.removeEventListener()para remover quaisquer listeners existentes quando o componente for desmontado.
Aqui está o código:
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]);
};
Para testar a função, você pode usá-la em um componente como este:
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"));
Isso registrará a posição vertical da rolagem da janela toda vez que ela for rolada.
Por favor, clique em 'Go Live' no canto inferior direito para executar o serviço web na porta 8080. Em seguida, você pode atualizar a aba Web 8080 para visualizar a página web.
Resumo
Parabéns! Você concluiu o laboratório React useOnWindowScroll Hook. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.