Introdução
Neste projeto, você aprenderá como criar um Hook React personalizado chamado useWindowSize para obter o tamanho atual da janela e usá-lo para renderizar condicionalmente a barra de navegação em uma aplicação web.
👀 Pré-visualização

🎯 Tarefas
Neste projeto, você aprenderá:
- Implementar o Hook personalizado
useWindowSizepara obter o tamanho atual da janela - Usar o Hook
useWindowSizeno componenteApppara atualizar a barra de navegação com base na largura da janela
🏆 Conquistas
Após concluir este projeto, você será capaz de:
- Criar um Hook React personalizado para encapsular funcionalidades reutilizáveis
- Utilizar os hooks
useStateeuseEffectpara gerenciar o estado e efeitos colaterais (side effects) - Renderizar componentes condicionalmente com base no tamanho atual da janela
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.jslocalizado no diretóriosrc/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
useWindowSizeretorna um objeto contendo a largura e altura atuais da janela. - O hook
useStateé usado para criar uma variável de estadowindowSizee uma funçãosetWindowSizepara atualizá-la. - A função
changeWindowSizeé definida para atualizar o estadowindowSizequando a janela é redimensionada. - O hook
useEffecté usado para adicionar um event listener para o eventoresizee removê-lo quando o componente é desmontado. - O objeto
windowSizeé retornado da funçãouseWindowSize.
Testar a Aplicação
- Salve o arquivo
useWindowSize.js. - Baixe as dependências usando o comando
npm installno terminal, aguarde a conclusão do download das dependências e, em seguida, inicie o projeto usando o comandonpm start. - Após o projeto iniciar com sucesso, clique em "Web 8080" para visualizá-lo no seu navegador.
- O efeito é que, quando o usuário redimensiona a janela, o conteúdo inferior mostrará a largura da janela, e a barra de navegação superior ocultará dois submenus em telas pequenas e mostrará três menus em telas grandes.

Parabéns! Você implementou com sucesso o Hook useWindowSize e o utilizou no componente App para atualizar a barra de navegação com base no tamanho da janela.
Resumo
Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.



