Publicado em: 17/03/2025

Au 03 - Mobile - React Native - Implementando funcionalidade de navegação - Mestres BEGIN


Neste início de projeto, vamos explorar os fundamentos da navegação em React Native utilizando o React Navigation, a biblioteca recomendada pelo Expo para gerenciamento de rotas em aplicativos móveis.

Por que usar React Navigation?

Embora nosso aplicativo seja simples e teoricamente não exigiria um sistema de navegação complexo, a implementação do React Navigation serve como:

  • Base de aprendizado para conceitos essenciais
  • Preparação para escalabilidade futura do projeto
  • Padronização das melhores práticas do ecossistema React Native

Começaremos com o Stack Navigator, a solução mais simples para navegação entre telas.

Configuração Inicial

Para iniciar, precisamos instalar os pacotes essenciais:

1npm install @react-navigation/native npm install react-native-screens react-native-safe-area-context

Estas dependências fornecem:

  • Gerenciamento eficiente de telas
  • Adaptação segura para diferentes formatos de tela (notch, etc.)

Estrutura Básica do Projeto

O coração da navegação é o NavigationContainer, que deve envolver toda a aplicação:

  • Importado de @react-navigation/native
  • Fornece o contexto de navegação para todos os componentes filhos
  • Permite acesso às funções de navegação em qualquer ponto do app

Reorganizamos a estrutura criando uma pasta src para o código fonte, com:

  • Arquivo routes.tsx para configuração das rotas
  • Componentes separados por funcionalidade

Conceito de Componentes

No React/React Native:

  • Componentes são funções que retornam elementos visuais (JSX/TSX)
  • Seguem convenção de nomes em PascalCase
  • O App.tsx é o componente raiz da aplicação

A View (similar a uma div no HTML) é o container básico para estruturar a interface.

Continuando nossa implementação, vamos configurar o Stack Navigator para criar o fluxo básico de navegação entre telas.

Estrutura de Componentes

Organizamos nosso projeto com:

  • src/routes.tsx: Configuração principal das rotas
  • src/screens/: Pasta contendo todas as telas
  • App.tsx: Ponto de entrada envolvido pelo NavigationContainer

Os componentes seguem a convenção React de:

  1. Nomes em PascalCase
  2. Exportação padrão (default export)
  3. Retorno de elementos visuais (JSX/TSX)

Configurando o Native Stack Navigator

Instalamos o pacote específico para navegação nativa:

1npm install @react-navigation/native-stack

Diferenças importantes:

  • Native Stack: Utiliza componentes nativos (melhor performance)
  • Regular Stack: Implementação em JavaScript (mais customizável)

Criando Telas Básicas

Implementamos duas telas de exemplo:

1// Tela Products 
2 const Products = () => { 
3 return ( 
4 <View> 
5 <Text>Hello from products</Text> 
6 <Button  
7 title="Navigate"  
8onPress={() => navigation.navigate("Products2")}  
9 /> 
10 </View> 
11 ); 
12 };

E uma segunda tela criada inline (apenas para demonstração):

1<Stack.Screen name="Products2" component={() => <Text>Hello from products 2</Text>} />

Observação: A criação inline de componentes não é recomendada em produção devido a problemas de performance.

Propriedades de Navegação

Toda tela registrada no navigator recebe automaticamente:

  • navigation: Objeto com métodos para navegação
  • route: Informações sobre a rota atual

O método principal para navegação é:

1navigation.navigate("NomeDaRota")

Personalizando o Header

O Stack Navigator oferece diversas opções de customização:

1options={{title: "Custom Title", headerShown: false, headerStyle: { 
2 backgroundColor: "#f4511e", 
3}, 
4 headerTintColor: "#fff", 
5}} 

Podemos esconder o header completamente ou ajustar seu estilo conforme o design do aplicativo.

Tipagem das Rotas

Para garantir segurança e autocompletar inteligente, definimos um tipo que descreve todas as rotas:

1type RootStackParamList = { 
2 Products: undefined; 
3 Details: undefined; 
4};

Este tipo:

  • Mapeia cada rota disponível
  • Define os parâmetros que cada rota pode receber
  • É usado para tipar nosso navigator e todas as telas

Configuração Completa do Navigator

Com a tipagem implementada, nosso arquivo de rotas fica robusto:

1const Stack = createNativeStackNavigator<RootStackParamList>(); 
2 function Routes() { 
3 return ( 
4 <Stack.Navigator> 
5 <Stack.Screen name="Products" component={Products} /> 
6 <Stack.Screen name="Details" component={Details} /> 
7</Stack.Navigator> 
8); 
9}

Benefícios desta abordagem:

  1. Erros são detectados em tempo de desenvolvimento
  2. Autocompletar funciona para nomes de rotas
  3. Parâmetros são validados automaticamente

Tipagem das Telas

Cada tela recebe props tipadas que incluem:

1type ProductsScreenProps = NativeStackScreenProps<RootStackParamList, "Products">;
2 function Products({ navigation }: ProductsScreenProps) { 
3 // ... 
4 } 

Isso nos dá acesso a:

  • navigation: Objeto com métodos como navigate, goBack, etc.
  • route: Informações sobre a rota atual e parâmetros recebidos

Fluxo de Navegação

Implementamos um fluxo simples entre Products e Details:

1// Navegação de Products para Details 
2 navigation.navigate("Details"); 
3// Navegação de Details de volta para Products 
4 navigation.navigate("Products"); 

Observações importantes:

  • O Stack Navigator mantém um histórico de navegação
  • O botão de voltar é fornecido automaticamente
  • Podemos customizar completamente este comportamento

Próximos Passos: Implementação Visual

Na próxima aula focaremos em:

  1. Criação do cabeçalho customizado
  2. Implementação do bottom navigation
  3. Trabalho com ícones
  4. Estilização completa baseada no design do XD

Considerações Finais

Esta implementação inicial nos proporcionou:

  • Base sólida: Estrutura pronta para escalar com novas telas
  • Segurança: Tipagem que previne erros comuns
  • Flexibilidade: Facilidade para adicionar complexidade posterior

Boas práticas para evolução do projeto:

  • Manter tipos em arquivos separados quando o projeto crescer
  • Evitar componentes inline para melhor performance
  • Documentar todas as rotas disponíveis e seus parâmetros
  • Considerar agrupamento lógico de telas relacionadas

Embora tenhamos usado um exemplo simples (Products/Details), estes mesmos conceitos se aplicam a aplicações complexas com dezenas de telas e fluxos de navegação sofisticados. A combinação de React Navigation com TypeScript proporciona uma experiência de desenvolvimento mais produtiva e segura.

Fernando Cunha
Artigo deFernando Cunha

Com mais de 15 anos de experiência em tecnologia e formado pela FAAP em Administração de empresas, hoje é o CEO da Mestres da Web, empresa referência no mercado nacional e com projeções de expansão internacional.

últimos vídeos

veja nossos vídeos mais recentes e esteja por dentro de muitas novidades.

Au 02 - Front-end - React - Estrutura de projeto - Mestres BEGIN
play

Au 02 - Front-end - React - Estrutura de projeto - Mestres BEGIN

Explorando a estrutura gerada pelo Create React App, entendendo o papel das pastas public e src, os conceitos de Virtual DOM, JSX e componentes, além de como o CSS é aplicado nos projetos React.

Autor deste artigo
Fernando Cunha17/03/2025
Au 03 - Front-end - React - Criando layout da nossa aplicação - Mestres BEGIN
play

Au 03 - Front-end - React - Criando layout da nossa aplicação - Mestres BEGIN

Explorando a criação de um layout fixo para a aplicação React, com barra lateral, barra superior e área dinâmica para conteúdo. Utilizando o React Router Dom v6 para gerenciar navegação entre rotas.

Autor deste artigo
Fernando Cunha17/03/2025
Au 04 - Front-end - React - Estilizando o layout da aplicação - Mestres BEGIN
play

Au 04 - Front-end - React - Estilizando o layout da aplicação - Mestres BEGIN

Abordando técnicas para organizar estilos em React, utilizando seletores CSS, CSS Modules, integração com React Router, reset CSS eficiente e boas práticas para garantir consistência visual e manutenibilidade.

Autor deste artigo
Fernando Cunha17/03/2025