Implementar o Hook useWindowSize
Para começar, abra o editor. Você pode ver os seguintes arquivos no seu editor.
├── 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
Nesta etapa, você aprenderá como implementar o Hook personalizado useWindowSize para obter o tamanho atual da janela.
- Abra o arquivo
useWindowSize.js localizado no diretório src/Hooks.
- Neste arquivo, importe as dependências necessárias:
import { useEffect, useState } from "react";
- Defina a função
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;
};
Explicação:
- A função
useWindowSize retorna um objeto contendo a largura e altura atuais da janela.
- O hook
useState é usado para criar uma variável de estado windowSize e uma função setWindowSize para atualizá-la.
- A função
changeWindowSize é definida para atualizar o estado windowSize quando a janela é redimensionada.
- O hook
useEffect é usado para adicionar um event listener para o evento resize e removê-lo quando o componente é desmontado.
- O objeto
windowSize é retornado da função useWindowSize.