Navegação com Expo Router
Configure o Expo Router para navegação baseada em arquivos, com rotas tipadas e links diretos.
Navegação com Expo Router é uma aula grátis de React Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de React Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de React Academy inclui 4 aulas no total.
O que é o Expo Router?
O Expo Router é uma biblioteca de roteamento baseada em arquivos para React Native (construída sobre o React Navigation). Assim como o App Router do Next.js, a estrutura de arquivos define suas rotas de navegação.
Instalação
Crie um novo projeto Expo com o Expo Router pré-configurado.
# Create new project:
npx create-expo-app@latest my-app --template tabs
# Or add to existing Expo project:
npx expo install expo-router react-native-safe-area-context react-native-screensRotas baseadas em arquivos
Os arquivos no diretório app/ tornam-se rotas automaticamente. index.tsx é a raiz, e [id].tsx é um segmento dinâmico.
app/
_layout.tsx # root layout (Stack navigator)
index.tsx # → / (home screen)
profile.tsx # → /profile
posts/
_layout.tsx # posts stack layout
index.tsx # → /posts
[id].tsx # → /posts/123 (dynamic)Estrutura raiz
O _layout.tsx raiz envolve todas as telas com provedores e define o navegador de nível superior.
// app/_layout.tsx
import { Stack } from 'expo-router';
export default function RootLayout() {
return (
<Stack>
<Stack.Screen name="index" options={{ title: 'Home' }} />
<Stack.Screen name="profile" options={{ title: 'Profile' }} />
</Stack>
);
}Navegação com Link
Use o componente Link de expo-router para navegação declarativa — semelhante a next/link.
import { Link } from 'expo-router';
function HomeScreen() {
return (
<Link href="/profile">Go to Profile</Link>
);
}Navegação com useRouter
Use useRouter() para navegação imperativa — avance, substitua a rota ou volte programaticamente.
import { useRouter } from 'expo-router';
function LoginForm() {
const router = useRouter();
async function handleLogin() {
await login();
router.replace('/dashboard');
}
}Rotas dinâmicas
Acesse os parâmetros da rota com useLocalSearchParams() em um arquivo de rota dinâmica.
// app/posts/[id].tsx
import { useLocalSearchParams } from 'expo-router';
export default function PostScreen() {
const { id } = useLocalSearchParams<{ id: string }>();
return <PostDetail postId={id} />;
}Navegação por abas
Use Tabs de expo-router dentro de uma estrutura de grupo para criar a navegação por abas na parte inferior.
// app/(tabs)/_layout.tsx
import { Tabs } from 'expo-router';
export default function TabLayout() {
return (
<Tabs>
<Tabs.Screen name="index" options={{ title: 'Home', tabBarIcon: ({ color }) => <HomeIcon color={color} /> }} />
<Tabs.Screen name="explore" options={{ title: 'Explore' }} />
</Tabs>
);
}Telas modais
Apresente uma tela como modal definindo presentation: 'modal' nas opções de Stack.Screen.
// app/_layout.tsx
<Stack.Screen name="modal" options={{ presentation: 'modal', title: 'Settings' }} />
// Navigate to modal:
router.push('/modal');Links profundos
O Expo Router gerencia automaticamente os links profundos. Defina seu esquema de URL em app.json, e links como myapp://posts/123 abrirão a tela correta.
// app.json
{
"expo": {
"scheme": "myapp"
}
}Padrão de autenticação
Use uma estrutura raiz que renderize condicionalmente as telas de autenticação ou as abas do aplicativo com base no estado de autenticação.
// app/_layout.tsx
import { Redirect } from 'expo-router';
function RootLayout() {
const { user } = useAuth();
if (!user) return <Redirect href="/login" />;
return <Stack />;
}Verificação rápida
Qual gancho do Expo Router lê os parâmetros de uma rota dinâmica, como o id em /posts/[id]?
Recapitulação
O Expo Router usa roteamento baseado em arquivos: app/index.tsx → início, app/[id].tsx → rota dinâmica. Defina as estruturas em _layout.tsx, navegue com Link ou useRouter() e leia os parâmetros com useLocalSearchParams().
Aprenda React com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 88
- Aulas
- 324
Perguntas Frequentes
A aula “Navegação com Expo Router” é grátis?
Sim — o texto completo de “Navegação com Expo Router” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de React Academy, atualize para CoddyKit PRO. O curso de React Academy inclui 4 aulas no total.
O que vou aprender em “Navegação com Expo Router”?
Configure o Expo Router para navegação baseada em arquivos, com rotas tipadas e links diretos. Você pratica React Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar React Academy?
Nenhuma experiência prévia é necessária. React Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Navegação com Expo Router”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de React Academy?
Sim. Cada aula de React Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Componentes principais do React Native vs DOM da Web
- Estilização com a API StyleSheet e Flexbox
- Navegação com Expo Router
- Acessando APIs do dispositivo: câmera, localização e notificações push