Aprenda React Native: guia completo para 2025
Rocketseat

Rocketseat

8 min de leitura
react-native
Fala, dev! Quer aprender a desenvolver aplicativos para Android e iOS usando React Native? Neste guia completo, você vai conhecer o passo a passo para iniciar no desenvolvimento mobile e entender como essa tecnologia pode impulsionar sua carreira.
Vamos utilizar o Expo, um framework que facilita o processo de criação de aplicativos, permitindo que você se concentre no aprendizado prático e no desenvolvimento de projetos reais. Eu sou Rodrigo Gonçalves, Head de Educação na Rocketseat. Vamos juntos explorar o universo do desenvolvimento mobile e dar o primeiro passo para impulsionar sua jornada como desenvolvedor(a).
GIF animado de um desenvolvedor digitando com expressão de entusiasmo. O GIF representa a empolgação e a paixão de criar aplicativos com React Native.
GIF animado de um desenvolvedor digitando com expressão de entusiasmo. O GIF representa a empolgação e a paixão de criar aplicativos com React Native.

O que é React Native?

Imagine criar aplicativos nativos para Android e iOS usando apenas JavaScript (e TypeScript, que a gente super recomenda!). Essa é a mágica do React Native! ✨
Com ele, você:
  • Cria apps para duas plataformas com um único código: adeus, retrabalho! 👋
  • Acelera o desenvolvimento: o famoso time-to-market agradece! ⏱️
  • Reaproveita código: componentes são como peças de LEGO, podemos usar as mesmas peças, mas construir infinitas possibilidades. 😉
  • Conta com uma comunidade gigante: precisa de ajuda? Tem sempre alguém disposto! 💪
  • Segue os passos de gigantes: Facebook, Microsoft, Discord... todos usam React Native! 🏆
Se você já tem familiaridade com desenvolvimento web (HTML, CSS e JavaScript), vai se sentir em casa! A lógica é muito parecida, o que torna a curva de aprendizado bem mais suave. Se você não tem, fique tranquilo que até o final desse artigo, eu vou te apresentar opções para você sair do zero e de forma gratuita! 😊
Logotipo do React Native centralizado acima do slogan “Learn once, write anywhere” (Aprenda uma vez, escreva em qualquer lugar). Abaixo, botões “Get Started” (Começar) e “Learn the Basics” (Aprenda o Básico). Na parte inferior, ícones representando as plataformas suportadas: web (com ícones de navegadores), Windows, macOS, Android e iOS. A imagem ilustra a capacidade do React Native de criar aplicativos para múltiplas plataformas com uma única base de código. Imagem retirada do site (https://reactnative.dev/) em 12/02/2025.
Logotipo do React Native centralizado acima do slogan “Learn once, write anywhere” (Aprenda uma vez, escreva em qualquer lugar). Abaixo, botões “Get Started” (Começar) e “Learn the Basics” (Aprenda o Básico). Na parte inferior, ícones representando as plataformas suportadas: web (com ícones de navegadores), Windows, macOS, Android e iOS. A imagem ilustra a capacidade do React Native de criar aplicativos para múltiplas plataformas com uma única base de código. Imagem retirada do site (https://reactnative.dev/) em 12/02/2025.

Como o React Native funciona?

Sabe aquela história de "escrever uma vez, rodar em qualquer lugar"? O React Native leva isso a sério! Você cria interfaces de forma declarativa, usando componentes como View, Image e Text. Eles são como blocos de montar que representam elementos visuais.
Quando o app é executado, esses componentes são traduzidos para seus equivalentes nativos em cada plataforma. Ou seja, uma View vira uma ViewGroup no Android e uma UIView no iOS. O resultado? Performance nativa! 🚀
A componentização é outro ponto forte. Em vez de criar 30 botões iguais, você cria um só e reaproveita. Precisou mudar a cor? Altera em um único lugar e voilà! ✨ Produtividade e manutenção fácil? Temos! ✅
Imagem representando um aperto de mãos entre um smartphone Android e um iPhone, simbolizando a capacidade do React Native de criar aplicativos para ambas as plataformas com uma única base de código. O aperto de mãos reforça a ideia de compatibilidade e colaboração entre os sistemas.
Imagem representando um aperto de mãos entre um smartphone Android e um iPhone, simbolizando a capacidade do React Native de criar aplicativos para ambas as plataformas com uma única base de código. O aperto de mãos reforça a ideia de compatibilidade e colaboração entre os sistemas.

Preparando o terreno: configurando o ambiente.

Antes de começar a codar, precisamos preparar o nosso ambiente de desenvolvimento. Mas calma, não precisa ter medo! Vamos usar o Expo Managed Workflow, que é super simples para iniciantes.
Você vai precisar:
  • Um editor de código: recomendamos o VS Code, mas você pode usar o seu preferido.
  • Um celular (Android ou iOS) ou um emulador: para testar o app.
Dica: se você usa Windows ou Linux e tem um iPhone, use o Expo Go! É um app que permite rodar o seu projeto diretamente no celular, sem precisar de cabo. 😉
Link para o passo a passo oficial da Rocketseat (em português, para facilitar!)
Pause este artigo agora, clique no link em uma nova aba e configure o seu ambiente. É rapidinho e vai fazer toda a diferença!

Criando o nosso primeiro projeto.

Agora sim, vamos começar a brincadeira! Abra o seu terminal e digite:
npx create-expo-app --template
Opções aparecerão para você selecionar qual template usar, e então escolha:
Navigation (TypeScript)
Agora é só escolher o nome do app:
my-first-app
O que esse comando faz?
  • npx: executa um pacote do npm sem precisar instalar globalmente.
  • create-expo-app: cria um novo projeto Expo.
  • navigation: usa um template com navegação (Expo Router) e TypeScript.
  • my-first-app: o nome do seu projeto (pode ser outro, claro!).
Depois de alguns segundos (ou minutos, dependendo da sua conexão com a internet 😉), o create-expo-app terminará de criar o seu projeto.

Abrindo o projeto no editor de código.

Abra a pasta do projeto no seu editor de código favorito. Recomendamos o VS Code, que é leve, poderoso e tem ótimas extensões para React Native.
Captura de tela do Visual Studio Code mostrando a estrutura de pastas de um projeto Expo recém-criado.  As pastas principais são: “app”, “assets”, “components”, “constants”, “node_modules”.  Os arquivos principais são: “.gitignore”, “app.json”, “package-lock.json”, “package.json” e “tsconfig.json”.
Captura de tela do Visual Studio Code mostrando a estrutura de pastas de um projeto Expo recém-criado. As pastas principais são: “app”, “assets”, “components”, “constants”, “node_modules”. Os arquivos principais são: “.gitignore”, “app.json”, “package-lock.json”, “package.json” e “tsconfig.json”.
Vamos dar uma olhada rápida no que foi criado?
  • node_modules/: aqui ficam todas as bibliotecas (pacotes) que o seu projeto usa. Você não deve mexer diretamente nos arquivos dentro desta pasta. O próprio npm (ou yarn) cuida de gerenciá-los.
  • app/: esta pasta é muito importante! É aqui que o Expo Router (o sistema de navegação) vai procurar as rotas do seu aplicativo. Cada arquivo .tsx (ou .js) dentro de app/ (e suas subpastas) representa uma tela do seu app. Já vem um index.tsx (ou similar) criado por padrão.
  • assets/: aqui você coloca imagens, fontes e outros arquivos estáticos que o seu app vai usar.
  • components/: essa pasta pode não existir inicialmente, dependendo do template. Recomendamos fortemente que você crie essa pasta para organizar os seus componentes reutilizáveis (botões, inputs, etc.).
  • constants/: essa pasta pode não existir inicialmente, dependendo do template. Recomendamos fortemente que você crie essa pasta caso queira manter informações que se repetem.
  • .gitignore: este arquivo diz ao Git (sistema de controle de versão) quais arquivos e pastas ele deve ignorar (ou seja, não enviar para o repositório online, como o GitHub). node_modules/ sempre deve estar aqui, pois é muito grande e pode ser recriada facilmente.
  • app.json: aqui ficam as configurações do seu app: nome, ícone, versão, configurações para Android, iOS, web, etc.
  • package.json: este arquivo lista as dependências do seu projeto (as bibliotecas que ele usa) e define scripts úteis (como o comando para iniciar o app).
  • package-lock.json: arquivo gerado automaticamente, que fixa a versão das dependências.
  • tsconfig.json: configurações do TypeScript (se você estiver usando TypeScript – e nós recomendamos que use!).

Limpando o terreno.

Antes de começar a desenvolver seu app, é fundamental ter um ambiente limpo e organizado. Por isso, vamos remover alguns diretórios criados automaticamente que contêm arquivos de exemplo e que podem causar conflitos com a nova estrutura que iremos implementar. Essa limpeza facilitará a manutenção e o entendimento do projeto, especialmente para quem está começando.
Passos para a limpeza:
  1. Remova a pasta app/ e todo o seu conteúdo original:
    1. Essa pasta foi gerada automaticamente, mas vamos recriá-la de forma organizada mais adiante dentro da nova estrutura.
  1. Dentro da pasta assets/, apague apenas a pasta fonts/ e todo o seu conteúdo original:
    1. Assim, eliminamos exemplos de fontes que não serão utilizados no desenvolvimento do seu aplicativo.
  1. Exclua a pasta components/ e todo o seu conteúdo original:
    1. Posteriormente, criaremos uma nova pasta para os nossos componentes customizados, organizada dentro da estrutura principal.
  1. Elimine a pasta constants/ e todo o seu conteúdo original:
    1. Essa remoção também visa evitar possíveis conflitos e preparar o ambiente para uma organização mais clara.
Depois de apagar essas pastas, a estrutura do seu projeto ficará semelhante à imagem abaixo. Os ícones e cores podem variar um pouco dependendo do seu editor de código e das extensões que você tem instaladas.
Captura de tela do Visual Studio Code mostrando a estrutura de pastas de um projeto Expo após a remoção das pastas de exemplo. As pastas restantes são: “assets/images” e “node_modules”. Os arquivos restantes são: “.gitignore”, “app.json”, “package-lock.json”, “package.json” e “tsconfig.json”.
Captura de tela do Visual Studio Code mostrando a estrutura de pastas de um projeto Expo após a remoção das pastas de exemplo. As pastas restantes são: “assets/images” e “node_modules”. Os arquivos restantes são: “.gitignore”, “app.json”, “package-lock.json”, “package.json” e “tsconfig.json”.

Componentes e estilização: dando vida ao app.

Agora que temos a estrutura básica do projeto pronta, vamos começar a construir a interface do nosso aplicativo. E para manter tudo organizado, vamos criar uma pasta chamada src (de source, ou "código-fonte") na raiz do projeto. Essa pasta vai abrigar todo o código que nós escrevermos, separando-o dos arquivos de configuração do Expo.
Dentro de src, crie uma pasta chamada app. É aqui que, a partir de agora, vamos colocar os arquivos que representam as telas (ou rotas) do nosso aplicativo.

Nosso primeiro componente:

Dentro da pasta src/app/, crie um arquivo chamado index.tsx. Este será o ponto de partida, a tela inicial do nosso app.
// src/app/index.tsx import React from 'react'; import { View, Text, StyleSheet } from 'react-native'; export default function Home() { return ( <View style={styles.container}> <Text style={styles.title}>Olá, Rocketseat!</Text> </View> ); } const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center', padding: 32, }, title: { fontSize: 24, fontWeight: 'bold', color: '#67159C', // Um roxo da Rocketseat! 😉 }, });
O que esse código faz?
  • Importa View, Text e StyleSheet do React Native.
  • Cria um componente Home (uma função que retorna JSX).
  • View: um container (como uma div no HTML).
  • Text: exibe um texto.
  • StyleSheet.create: cria um objeto de estilos (organização!).
  • style: aplica os estilos aos componentes.
  • Regras CSS:
    • camelCase: em vez de font-size, usamos fontSize.
    • flexbox: já vem ativado por padrão! 🎉
    • Unidades: não precisa de px (o React Native usa densidade independente de pixel).
Captura de tela do VS Code mostrando a criação das pastas “src” e “app”, e do arquivo “index.tsx” dentro da pasta “app”.
Captura de tela do VS Code mostrando a criação das pastas “src” e “app”, e do arquivo “index.tsx” dentro da pasta “app”.

Executando o app: a mágica acontece!

Agora que você já escreveu o seu primeiro componente React Native, chegou a hora de vê-lo em ação!
No terminal, certifique-se de que você está dentro da pasta do projeto (my-first-app, ou o nome que você escolheu). Se não estiver, navegue até lá usando o comando cd nome-da-pasta.
Dentro da pasta do projeto, digite o seguinte comando e pressione enter:
npx expo start
Este comando inicia o servidor de desenvolvimento do Expo. Você verá um menu com várias opções no terminal, e um QR code será gerado.

Abrindo o app no emulador/simulador:

  • iOS: pressione a tecla i no terminal. Isso abrirá o app no simulador iOS (se você estiver usando um Mac e tiver o Xcode instalado).
  • Android: pressione a tecla a no terminal. Isso abrirá o app no emulador Android (se você tiver o Android Studio configurado).
  • Web: pressione a tecla w no terminal. Isso abrirá o app em uma aba do seu navegador.

Abrindo o app no seu celular (dispositivo físico):

  1. Instale o app Expo Go: procure por "Expo Go" na App Store (iOS) ou Google Play Store (Android) e instale o aplicativo.
  1. Escaneie o QR Code: abra o Expo Go no seu celular e use a opção de escanear o QR code. Aponte a câmera para o QR code que apareceu no seu terminal.
  1. Conexão na mesma rede: certifique-se de que o seu celular e o seu computador estejam conectados à mesma rede Wi-Fi.
Se tudo correr bem, você verá a tela do seu aplicativo com a mensagem "Olá, Rocketseat!" centralizada, como na imagem abaixo:
Captura de tela mostrando o Visual Studio Code, com o código do componente “Home”, e o emulador/navegador, exibindo o aplicativo com o texto “Olá, Rocketseat!” centralizado.
Captura de tela mostrando o Visual Studio Code, com o código do componente “Home”, e o emulador/navegador, exibindo o aplicativo com o texto “Olá, Rocketseat!” centralizado.

Debugger: desvendando os mistérios do código.

Precisa descobrir por que algo não está funcionando? Use o debugger!
  • console.log: exiba mensagens no terminal.
  • Breakpoints: pause a execução em pontos específicos do código para inspecionar variáveis. (Aperte j no terminal para abrir o debugger no navegador).

Componentes customizados: reutilização é a chave!

Agora que você já criou seu primeiro componente (Home), vamos dar um passo além e aprender a criar componentes customizados. A grande vantagem de criar seus próprios componentes é a reutilização de código. Em vez de repetir o mesmo código várias vezes, você cria um componente uma única vez e o reutiliza em diferentes partes do seu aplicativo. É como construir com peças de LEGO: você monta as peças básicas e depois as combina para criar estruturas mais complexas.

Organizando o código: a pasta components

Para manter o nosso projeto organizado, vamos criar uma pasta chamada components dentro da pasta src. É aqui que vamos guardar todos os nossos componentes customizados.

Criando o componente Button

Vamos começar criando um componente Button (botão). Ele será um botão estilizado que poderemos usar em várias telas do nosso app.
Dentro da pasta components, crie uma nova pasta chamada Button (com "B" maiúsculo, por convenção). Dentro da pasta Button, crie dois arquivos:
  • index.tsx: este arquivo conterá a estrutura do nosso componente (o que ele é e como ele se comporta).
  • styles.ts: este arquivo conterá os estilos do nosso componente (como ele aparece).
Essa separação entre estrutura e estilo é uma boa prática para manter o código organizado e fácil de manter. Abra o arquivo src/components/Button/index.tsx e cole o seguinte código:
// src/components/Button/index.tsx import React from 'react'; import { TouchableOpacity, Text } from 'react-native'; // 1. Importações import { styles } from './styles'; // 2. Importa os estilos interface ButtonProps { // 3. Define as Props title: string; onPress: () => void; } export function Button({ title, onPress, ...rest }: ButtonProps) { // 4. Componente Button return ( <TouchableOpacity style={styles.button} onPress={onPress} {...rest}> <Text style={styles.buttonText}>{title}</Text> </TouchableOpacity> ); }
Abra o arquivo src/components/Button/styles.ts e cole o seguinte código:
// src/components/Button/styles.ts import { StyleSheet } from 'react-native'; export const styles = StyleSheet.create({ button: { backgroundColor: '#67159C', // Roxo da Rocketseat! borderRadius: 8, paddingVertical: 12, paddingHorizontal: 24, alignItems: 'center', }, buttonText: { color: '#FFFFFF', fontSize: 16, fontWeight: 'bold', }, });
O que esse código faz?
Vamos analisar o código passo a passo:
index.tsx:
  1. Importações:
      • React: a biblioteca React (essencial).
      • TouchableOpacity, Text: componentes do React Native. TouchableOpacity é um componente que torna qualquer coisa "clicável", com um efeito visual de opacidade quando tocado.
      • styles: importa os estilos definidos no arquivo styles.ts.
  1. interface ButtonProps:
      • Isso define as props (propriedades) que o nosso componente Button pode receber. É como dizer: "para usar este botão, você precisa me dizer o title (texto do botão) e o onPress (o que acontece quando o botão é pressionado)."
      • title: string: o texto do botão (uma string).
      • onPress: () => void: a função que será executada quando o botão for pressionado. () => void significa "uma função que não recebe nenhum argumento e não retorna nada".
  1. export function Button(...):
      • Define o componente Button como uma função.
      • { title, onPress, ...rest }: ButtonProps: recebe as props.
        • title e onPress são as props que definimos na interface.
        • ...rest: é um operador especial chamado rest operator. Ele pega todas as outras props que forem passadas para o componente, mas que não foram explicitamente listadas (como title e onPress).
  1. return (...):
      • Retorna o JSX que define a estrutura do componente.
      • <TouchableOpacity ...>: o componente principal.
        • style={styles.button}: aplica os estilos definidos em styles.ts.
        • onPress={onPress}: define o que acontece quando o botão é pressionado (executa a função onPress que foi passada como prop).
        • {...rest}: aplica todas as outras props que foram passadas para o componente Button diretamente no TouchableOpacity. Isso é útil para, por exemplo, passar propriedades de acessibilidade.
      • <Text style={styles.buttonText}>{title}</Text>: Exibe o texto do botão (a prop title), com os estilos definidos.
styles.ts:
  • import { StyleSheet } from 'react-native';: importa o StyleSheet do React Native.
  • export const styles = StyleSheet.create(...): cria um objeto styles com os estilos do componente. O export permite que a gente importe esses estilos em outros arquivos.
  • button: estilos para o TouchableOpacity.
  • buttonText: estilos para o Text.

Usando o componente Button

Agora que você criou o componente Button, vamos usá-lo na tela inicial do nosso app (src/app/index.tsx):
// src/app/index.tsx import React from 'react'; import { View, Text, StyleSheet } from 'react-native'; import { Button } from '../components/Button'; // 1. Importa o componente Button export default function Home() { return ( <View style={styles.container}> <Text style={styles.title}>Olá, Rocketseat!</Text> <Button title="Entrar" onPress={() => alert('Clicou!')} /> {/* 2. Usa o componente Button */} </View> ); } const styles = StyleSheet.create({ container: { backgroundColor: '#19181F', flex: 1, justifyContent: 'center', alignItems: 'center', padding: 32, }, title: { fontSize: 24, marginBottom: 20, fontWeight: 'bold', color: '#67159C', // Um roxo da Rocketseat! 😉 }, });
O que mudou?
  • import { Button } from '../components/Button';: importamos o nosso componente Button.
  • <Button title="Entrar" onPress={() => alert('Clicou!')} />: usamos o componente Button como se fosse uma tag HTML.
    • title="Entrar": passamos o texto do botão ("Entrar") como a prop title.
    • onPress={() => alert('Clicou!')}: passamos uma função que exibe um alerta quando o botão é pressionado.
Com isso, você criou seu primeiro componente customizado, reutilizável e estilizado! 🚀 No próximo passo, vamos aprender como criar um componente para inserir texto (um input).

Componente Input: coletando dados do usuário.

Depois de criar um botão, que tal um campo de texto para o usuário digitar? Vamos criar um componente Input para isso!
Siga a mesma estrutura que usamos para o Button:
  1. Dentro da pasta src/components/, crie uma nova pasta chamada Input.
  1. Dentro da pasta Input, crie dois arquivos:
      • index.tsx (estrutura do componente)
      • styles.ts (estilos do componente)
src/components/Input/index.tsx:
// src/components/Input/index.tsx import React from 'react'; import { TextInput, TextInputProps } from 'react-native'; import { styles } from './styles'; export function Input({ ...rest }: TextInputProps) { return ( <TextInput style={styles.input} placeholderTextColor="#999999" // Cor do placeholder {...rest} /> ); }
src/components/Input/styles.ts:
// src/components/Input/styles.ts import { StyleSheet } from 'react-native'; export const styles = StyleSheet.create({ input: { width: '100%', height: 52, backgroundColor: '#121214', // Cor de fundo escura borderRadius: 10, padding: 12, fontSize: 16, borderWidth: 1, margin: 20, color: '#FFFFFF', // Cor do texto digitado }, });
Explicação do código do Input:
Vamos analisar o código passo a passo:
index.tsx:
  • TextInput: componente do React Native para entrada de texto.
  • TextInputProps: a tipagem das propriedades do TextInput. Usamos isso para ter autocompletar e evitar erros.
  • {...rest}: repassamos todas as propriedades que forem recebidas pelo nosso componente Input diretamente para o TextInput do React Native. Isso inclui coisas como placeholder, onChangeText, value, keyboardType, etc.
  • placeholderTextColor="#999999": adicionamos uma cor cinza claro para o texto do placeholder (aquele texto que aparece antes do usuário digitar).
styles.ts:
  • Estilos para deixar o Input com a cara da Rocketseat! 😉 Usamos cores escuras e uma borda roxa.

Usando o Input e o useState (estado):

Agora, vamos voltar ao nosso arquivo src/app/index.tsx e usar o componente Input que acabamos de criar. E é aqui que a mágica do estado entra em cena!
// src/app/index.tsx import React, { useState } from 'react'; import { View, Text, StyleSheet } from 'react-native'; import { Button } from '../components/Button'; import { Input } from '../components/Input'; export default function Home() { const [name, setName] = useState(''); return ( <View style={styles.container}> <Text style={styles.title}>Olá, {name}!</Text> <Input placeholder="Digite seu nome" onChangeText={setName} /> <Button title="Entrar" onPress={() => alert(`Olá, ${name}!`)} /> </View> ); } const styles = StyleSheet.create({ container: { backgroundColor: '#19181F', flex: 1, justifyContent: 'center', alignItems: 'center', padding: 32, }, title: { fontSize: 24, fontWeight: 'bold', color: '#453467', }, });
Com isso, você aprendeu um dos conceitos mais importantes do React (e React Native): o estado! Ele é fundamental para criar aplicativos interativos e dinâmicos, que respondem às ações do usuário.
Imagem estática mostrando o aplicativo React Native. Um campo de texto (Input) com o placeholder “Digite seu nome”. Conforme o usuário digita, o texto “Olá, [nome digitado]” acima do input é atualizado em tempo real. Abaixo do input, há um botão com o texto “Entrar”.
Imagem estática mostrando o aplicativo React Native. Um campo de texto (Input) com o placeholder “Digite seu nome”. Conforme o usuário digita, o texto “Olá, [nome digitado]” acima do input é atualizado em tempo real. Abaixo do input, há um botão com o texto “Entrar”.
Agora que já temos um app interativo, que tal dar um passo além e aprender a navegar entre diferentes telas? No próximo tópico, vamos explorar o Expo Router e criar uma estrutura de navegação para o nosso aplicativo!

Navegação (Expo Router): indo além!

Até agora, nosso app tem apenas uma tela. Mas, na maioria dos casos, você vai precisar de várias telas: uma tela inicial, uma tela de configurações, uma tela de perfil, e assim por diante. É aí que entra a navegação!
Vamos usar o Expo Router, uma ferramenta poderosa e fácil de usar que já vem incluída no template que escolhemos. O Expo Router usa uma abordagem de navegação baseada em arquivos: cada arquivo .tsx (ou .js) dentro da pasta src/app/ (e suas subpastas) automaticamente se torna uma rota (uma tela) do seu aplicativo.

Criando a tela dashboard.tsx

Vamos criar uma nova tela chamada "Dashboard".
  1. Dentro da pasta src/app/, crie um novo arquivo chamado dashboard.tsx.
  1. Cole o seguinte código dentro de dashboard.tsx:
// src/app/dashboard.tsx import React from 'react'; import { View, Text, StyleSheet } from 'react-native'; import { Button } from '../components/Button'; // Importa o nosso componente Button import { useRouter } from 'expo-router'; // Importa o useRouter export default function Dashboard() { const router = useRouter(); // Inicializa o useRouter return ( <View style={styles.container}> <Text style={styles.title}>Dashboard</Text> <Button title="Voltar" onPress={() => router.back()} /> </View> ); } const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center', padding: 32, }, title: { fontSize: 24, fontWeight: 'bold', marginBottom: 24, // Adiciona um espaço abaixo do título }, });
O que esse código faz?
  • import { useRouter } from 'expo-router';: importa o Hook useRouter do Expo Router. Hooks são funções especiais que nos permitem usar recursos do React (e de bibliotecas como o Expo Router) dentro de componentes funcionais.
  • const router = useRouter();: "inicializa" o useRouter. Isso nos dá acesso a um objeto router que contém funções para navegar entre as telas.
  • <Button title="Voltar" onPress={() => router.back()} />:
    • Usamos o nosso componente Button.
    • onPress={() => router.back()}: quando o botão "Voltar" é pressionado, chamamos a função router.back(). Essa função faz exatamente o que o nome diz: volta para a tela anterior.

Navegando para a tela dashboard:

Agora, vamos modificar o nosso arquivo src/app/index.tsx para que, quando o usuário clique no botão "Entrar", ele seja redirecionado para a tela dashboard.
// src/app/index.tsx import React, { useState } from 'react'; import { View, Text, StyleSheet } from 'react-native'; import { Button } from '../components/Button'; import { Input } from '../components/Input'; import { useRouter } from 'expo-router'; // <-- Importe o useRouter aqui também export default function Home() { const [name, setName] = useState(''); const router = useRouter(); // <-- Inicialize o useRouter return ( <View style={styles.container}> <Text style={styles.title}>Olá, {name}!</Text> <Input placeholder="Digite seu nome" onChangeText={setName} /> <Button title="Entrar" onPress={() => { if (name.trim() !== '') { // Verifica se o nome foi preenchido router.push('/dashboard'); // Navega para /dashboard } else { alert('Por favor, digite seu nome!'); // Exibe um alerta se o nome estiver vazio } }} /> </View> ); } const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center', padding: 32, }, title: { fontSize: 24, fontWeight: 'bold', color: '#453467', }, });
Explicação das mudanças em index.tsx:
  1. import { useRouter } from 'expo-router';: importamos o useRouter também no componente Home.
  1. const router = useRouter();: inicializamos o useRouter.
  1. onPress do botão "Entrar":
      • Agora, em vez de simplesmente exibir um alerta, a função onPress faz o seguinte:
        • if (name.trim() !== ''): verifica se o usuário digitou alguma coisa no campo de nome. name.trim() remove espaços em branco do início e do fim do nome, para evitar que o usuário navegue com um nome vazio.
        • router.push('/dashboard');: se o nome não estiver vazio, usamos router.push('/dashboard') para navegar para a tela dashboard. Note que usamos /dashboard como o caminho – o Expo Router mapeia isso automaticamente para o arquivo src/app/dashboard.tsx. O método .push() empilha as telas.
        • else { alert('...'); }: se o nome estiver vazio, exibimos um alerta pedindo para o usuário digitar o nome.
Captura de tela do emulador/dispositivo mostrando a tela “Dashboard” do aplicativo. A tela tem o título “Dashboard” centralizado e um botão roxo com o texto “Voltar” abaixo.
Captura de tela do emulador/dispositivo mostrando a tela “Dashboard” do aplicativo. A tela tem o título “Dashboard” centralizado e um botão roxo com o texto “Voltar” abaixo.
Testando a navegação:
  1. Salve todos os arquivos modificados (index.tsx e dashboard.tsx).
  1. Se o Hot Reloading não atualizar o app automaticamente, reinicie o servidor Expo (Ctrl+C e npx expo start).
  1. Digite seu nome no campo de texto.
  1. Clique no botão "Entrar".
  1. Você deverá ser redirecionado para a tela "Dashboard"!
  1. Clique no botão "Voltar" para retornar à tela inicial.

Conclusão: sua jornada React Native começou!

Parabéns! Você deu seus primeiros passos no mundo do desenvolvimento mobile com React Native e Expo. Neste guia completo, você aprendeu:
  • O que é React Native e por que ele é tão incrível.
  • Como configurar seu ambiente de desenvolvimento.
  • Como criar seu primeiro projeto e executar o app.
  • Como criar e estilizar componentes.
  • Como usar o estado para tornar seu app interativo.
  • Como implementar navegação entre telas com o Expo Router.
Mas isso é só o começo! O React Native tem muito mais a oferecer. Agora, é hora de colocar a mão na massa, criar seus próprios projetos e continuar aprendendo.
Próximos passos:
🚀
  • Conheça a formação React Native: quer se tornar um especialista? A formação React Native da Rocketseat te leva do zero ao app publicado, com mais de 118 horas de conteúdo e certificado!
Explodiu sua mente?! 🤯 Então compartilhe este artigo com aquele amigo ou amiga que também quer dominar o React Native! E ó: a jornada só está começando! Corra para a comunidade da Rocketseat no Discord, tire suas dúvidas, troque ideias com outros devs apaixonados e continue aprendendo com a gente!
💜
Eu sei que, às vezes, mesmo com o guia mais detalhado, as coisas podem dar errado. Por isso, para garantir que você não fique travado(a), preparei um vídeo completo lá no meu canal, mostrando um conteúdo semelhante. Às vezes, ver o código sendo feito "ao vivo" ajuda a clarear as coisas. É só dar o play e bora codar junto!
Video preview
 
Artigos_

Explore conteúdos relacionados

Descubra mais artigos que complementam seu aprendizado e expandem seu conhecimento.

Aprenda programação do zero e DE GRAÇA

No Discover você vai descomplicar a programação, aprender a criar seu primeiro site com a mão na massa e iniciar sua transição de carreira.

COMECE A ESTUDAR AGORA