Para trabalharmos com navegação no Expo nós podemos utilizar o React Navigation (https://reactnavigation.org/). Ele é uma biblioteca para navegação entre telas no React Native e que também funciona com o Expo. Ele possui uma biblioteca principal e uma separada para as diferentes formas de se trabalhar com navegação.
Nós iremos trabalhar com o Stack Navigator, o mais comum. Ele funciona de forma parecida com o histórico de navegação do browser, colocando as páginas do histórico em uma pilha. Sempre que uma nova tela é acessada através dele ela vai para a pilha, o que nos permite voltar para as páginas anteriores nesse histórico.
Obs.: Como dito anteriormente, existem outras formas de navegação e vale a pena dar uma olhada em cada uma delas separadamente depois.
Para começar a usar o React Navigation precisamos instalar a própria biblioteca e também a biblioteca do Navigator que vamos utilizar:
yarn add @react-navigation/native @react-navigation/native-stack
npx expo install react-native-screens react-native-safe-area-context
Com ele instalado, podemos criar uma pasta chamada src, na raiz do projeto. Dentro dela iremos criar uma pasta chamada “screens”, que é onde guardaremos os componentes de telas.
Agora vamos criar um componente específico para o Navigator em um arquivo StackNavigator.js dentro da pasta “src”, que é quem irá gerenciar a troca de páginas do app:
import { NavigationContainer } from "@react-navigation/native"
import { createNativeStackNavigator } from "@react-navigation/native-stack"
const Stack = createNativeStackNavigator()
export default function StackNavigator() {
return (
<NavigationContainer>
<Stack.Navigator>
</Stack.Navigator>
</NavigationContainer>
)
}
Temos uma estrutura básica para o Navigator, agora precisamos de telas. Dentro da pasta “screens”, crie um arquivo NavigationScreen.js:
Obs.: Para não termos que repetir o setup de criação do Expo várias vezes vamos utilizar esse mesmo app nas próximas aulas, criando uma nova tela para cada aula.
import { View, Text } from "react-native";
export default function NavigationScreen() {
return (
<View>
<Text>Aula de Navegação</Text>
</View>
);
}