React Native

Navegação em Aplicativos React Native com Expo Router

React Native 4 de Mar de 2024

A navegação em aplicativos móveis e web é um aspecto fundamental para proporcionar uma experiência de usuário suave e intuitiva. Tradicionalmente, gerenciar a navegação em projetos React Native exigia uma abordagem mais manual e, muitas vezes, complexa. No entanto, com a introdução do Expo Router, esse cenário está mudando, trazendo uma nova era de simplicidade e eficiência para desenvolvedores de aplicativos universais.

O Que é Expo Router?

O Expo Router é um sistema de roteamento baseado em arquivos, projetado para aplicações React Native e web. Inspirado pelos melhores conceitos de roteamento de sistemas de arquivos do desenvolvimento web moderno, o Expo Router facilita a implementação de uma navegação eficaz e intuitiva em aplicativos, permitindo que eles funcionem perfeitamente em todas as plataformas — Android, iOS e web — com mínima configuração.

A Simplicidade por Trás do Expo Router

A filosofia do Expo Router é baseada na simplicidade. Adicionar uma nova tela ao seu aplicativo é tão fácil quanto criar um novo arquivo no diretório apropriado. Esse arquivo então se torna automaticamente uma rota acessível no seu aplicativo, eliminando a necessidade de definir explicitamente as rotas em um arquivo de configuração centralizado.

Vantagens do Uso do Expo Router

Universalidade

O Expo Router foi criado com a universalidade em mente. Ele permite que os desenvolvedores criem aplicativos que ofereçam uma experiência de usuário consistente em todas as plataformas, utilizando os mesmos componentes React Native e web. Isso não apenas melhora a eficiência do desenvolvimento, mas também garante que os aplicativos mantenham uma aparência e funcionamento uniformes, independentemente do dispositivo.

Facilidade de Uso

Graças à sua abordagem baseada em arquivos, o Expo Router simplifica significativamente o processo de adição e gerenciamento de rotas em um aplicativo. Essa facilidade de uso permite que desenvolvedores concentrem mais tempo e recursos no aprimoramento da experiência do usuário, em vez de lidar com a complexidade da configuração de navegação.

Flexibilidade

Embora o Expo Router promova uma abordagem convencional para a criação de rotas, ele também oferece a flexibilidade necessária para atender a casos de uso mais complexos. Isso inclui suporte para rotas dinâmicas, permitindo que os desenvolvedores implementem funcionalidades avançadas de navegação de forma intuitiva e eficiente.

Convenção de Roteamento com Expo Router

O Expo Router introduz uma abordagem revolucionária para o roteamento em aplicações React Native, utilizando uma convenção de roteamento baseada em arquivos. Essa abordagem simplifica significativamente o processo de adicionar novas rotas e páginas ao seu aplicativo, tornando-a uma ferramenta indispensável para desenvolvedores modernos.

Com o Expo Router, cada arquivo criado no diretório app automaticamente se torna uma rota na aplicação. Por exemplo, os seguintes arquivos resultarão nas rotas correspondentes:

app
├── index.js         -> corresponde a '/'
├── home.js          -> corresponde a '/home'
├── [user].js        -> corresponde a caminhos dinâmicos
├── settings
│   └── index.js     -> corresponde a '/settings'

Páginas com Expo Router

As páginas são definidas exportando um componente React como o valor padrão de um arquivo no diretório app. Os arquivos devem usar uma das extensões .js, .jsx, .tsx, .ts.

Por exemplo, crie o diretório app no seu projeto e, em seguida, crie um arquivo index.js dentro dele. Adicione o seguinte trecho:

import { Text } from 'react-native';

export default function Page() {
  return <Text>Página inicial</Text>;
}

O exemplo acima corresponde à rota / no aplicativo e no navegador. Arquivos nomeados index correspondem ao diretório pai e não adicionam um segmento de caminho. Por exemplo, app/settings/index.js corresponde a /settings no aplicativo.

Rotas Dinâmicas com Expo Router

Rotas dinâmicas correspondem a qualquer caminho não correspondido em um determinado nível de segmento.

Rota URL Correspondente
app/blog/[slug].js /blog/123
app/blog/[...rest].js /blog/123/settings

Rotas com maior especificidade serão correspondidas antes de uma rota dinâmica. Por exemplo, /blog/roxo corresponderá a blog/roxo.js antes de blog/[id].js.

Vários slugs podem ser correspondidos em uma única rota usando a sintaxe de rest (...). Por exemplo, app/blog/[...id].js corresponde a /blog/123/settings.

Segmentos dinâmicos são acessíveis como parâmetros de pesquisa no componente da página.

import { useLocalSearchParams } from 'expo-router';
import { Text } from 'react-native';

export default function Page() {
  const { slug } = useLocalSearchParams();

  return <Text>Post do blog: {slug}</Text>;
}

Adotando o Expo Router, desenvolvedores podem aproveitar ao máximo a conveniência e eficiência do roteamento baseado em arquivos, agilizando o desenvolvimento de aplicativos React Native e web com uma experiência de usuário coesa e integrada.

Vem ver na prática  com Rodrigo Gonçalves a customização de um Drawer Navigation com Expo Router:

Marcadores