Navegação React Native: tutorial com exemplos

Este tutorial do React Native Navigation foi atualizado pela última vez em 1º de dezembro de 2022 e contém informações sobre a versão mais recente do React Navigation (v6 no momento da escrita), bem como uma seção comparando o React Navigation com a biblioteca React Router. Confira React Navigation vs React Native Navigation: Qual é o certo para você? para saber mais informações.

Os aplicativos móveis consistem em várias telas. Ao construir um aplicativo móvel, uma grande preocupação é como lidar com a navegação do usuário dentro do aplicativo, como a apresentação de telas e transições entre telas.

React Navigation é uma das bibliotecas de navegação mais conhecidas para React. Neste tutorial, abordaremos os fundamentos da navegação React Native, mostraremos como começar a usar o React Navigation em um aplicativo React Native e percorreremos alguns exemplos de navegação React Native.

O que é navegação reativa?

React Navigation é uma biblioteca independente e 8 maneiras de corrigir problema de tela preta do Windows 11 permite implementar funcionalidade de navegação em aplicativos React Native.

React Navigation é escrito em JavaScript e não usa diretamente a API de navegação nativa no iOS e Android. Em vez disso, recria algum subconjunto dessas APIs. Isso permite que plug-ins JS de terceiros sejam integrados para personalização máxima e depuração mais fácil, sem a necessidade de aprender Objective-C, Swift, Java, Kotlin, etc.

Reagir Navegação 6.0

No momento em que este artigo foi escrito, a versão mais estável do React Navigation era o React Navigation 6.0, lançado em agosto de 2021. De acordo com o post de lançamento, a versão mais recente concentra-se na flexibilidade e facilidade de uso. No entanto, a equipe também disse que esta versão mais recente traz poucas mudanças importantes.

Alguns dos novos recursos incluídos no React Navigation 6.0 incluem:

  • Opções flexíveis de personalização para o Navigator: Isso significa que os desenvolvedores agora podem ajustar ainda mais a aparência do Navigator

  • Componente Grupo: O elemento Grupo permite aos usuários compartilhar opções e configurações de tela entre telas em um projeto. Portanto, isso permite mais organização e legibilidade do código

  • Biblioteca de componentes: a partir da v6, a equipe de navegação criou uma biblioteca de componentes de elementos. Isto é útil para situações em que o usuário deseja construir um navegador personalizado

  • Navegação nativa: a biblioteca agora usa pilha nativa por padrão. Isso significa que em dispositivos mais antigos a navegação entre telas grandes é mais rápida e menos exigente

  • Plug-in Flipper: esta ferramenta permite aos desenvolvedores depurar seus aplicativos e monitorar o desempenho. Como excluir/desativar arquivos usados ​​recentemente do File Explorer Na versão mais recente, agora existe um plugin oficial do React Navigation que facilita o processo de teste

O que é navegação React Native?

React Native Navigation é uma alternativa popular ao React Navigation. É um módulo que depende e foi projetado para ser usado com React Native. React Native Navigation é um pouco diferente porque usa diretamente a API de navegação nativa no iOS e Android, fornecendo assim uma aparência mais nativa.

Para explorar as diferenças entre React Navigation e React Native Navigation com mais detalhes, consulte “ React Navigation vs. React Native Navigation: Qual é o certo para você? ”

Outra opção: React Router Native

React Router Native é outra solução para implementar funcionalidade de navegação em aplicativos React Native. É desenvolvido pela equipe Remix, famosa por seu moderno framework web.

Compartilha a maior parte de seu código API React Router Native com a estrutura React Router. Isso significa que os desenvolvedores web que usaram o React Router acharão fácil começar a usar sua versão nativa.

Em termos de facilidade de uso, React Navigation e React Router Native são idênticos. Por exemplo, observe o seguinte código do roteador nativo:

importar {NativeRouter, Route, Link} de "react-router-native"; 
const Home = () => <Text>Home</Text>; 
const Sobre = () => <Text>Sobre</Text>; 
const App = () => ( 
  <NativeRouter> 
    <View> 
      <View> 
        {/* Defina nossos links.
  </NativeRouter>
);

Comparado à Navegação, podemos ver que o código é semelhante:

importar { NavigationContainer } de "@react-navigation/native"; 
importar {createNativeStackNavigator} de "@react-navigation/native-stack"; 
function HomeScreen() { 
  return ( 
    <View> 
      <Text>Tela inicial</Text> 
    </View> 
  ); 
} 
function AboutScreen() { 
  return ( 
    <View> 
      <Text>Sobre a tela</Text> 
    </View> 
  ); 
} 
const Stack = createNativeStackNavigator(); 
exportar função padrão App() { 
  return ( 
    <NavigationContainer> 
     <Stack.Navigator> 
        {/*Definir nossas rotas*/}
        <Stack.Screen name="Home" componente={HomeScreen} />
        <Stack.Screen name="About" componente={AboutScreen} /> 
      </Stack.Navigator> 
    </NavigationContainer> 
  ); 
}

O código usado para implementar o roteamento em ambas as bibliotecas é idêntico entre si. Esta é uma grande vantagem, pois significa que há uma curva de aprendizado menor para ambas as estruturas.

Se você tem experiência em desenvolvimento web, eu recomendaria o React Router Native, pois seu uso é o mesmo do React Router. Caso contrário, React Navigation deve ser a escolha certa. Notas interessantes - Compartilhe tutoriais valiosos! Por ter uma comunidade maior, pode fornecer mais apoio ao desenvolvimento.

Instale a navegação React

Supondo que você tenha o Yarn instalado, a primeira etapa é configurar seu aplicativo React Native. A maneira mais fácil de começar a usar o React Native é usar as ferramentas Expo, pois elas permitem iniciar um projeto sem instalar e configurar o Xcode ou o Android Studio.

Primeiro, inicialize um aplicativo Expo em branco usando o seguinte comando bash:

npx create-expo-app ReactNavigationDemo

Isso iniciará o processo de download e configurará o projeto:

Em seguida, entre na pasta do projeto e abra o editor de código:

cd ReactNavigationDemo

Se estiver usando o VS Code, você pode usar o seguinte comando para abrir a pasta atual no editor:

código.

Inicie o aplicativo usando o seguinte comando:

início da exposição npx

A próxima etapa é instalar a biblioteca React Native do projeto react-navigation:

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

Navegador de pilha React Native

React Navigation é construído usando JavaScript, permitindo que você crie componentes e padrões de navegação que parecem verdadeiros nativos.

O React Navigation usa os chamados navegadores de pilha para gerenciar o histórico de navegação e a renderização das telas correspondentes com base na rota que o usuário segue dentro do aplicativo. Apenas uma tela é apresentada ao usuário por vez.

Imagine uma pilha de papel; navegar para uma nova tela coloca-o no topo da pilha e navegar para trás remove-o da pilha. Stack Navigator também fornece transições e gestos nativos do iOS e do Android. Observe que um aplicativo pode ter vários navegadores de pilha.

Exemplo de navegação React Native

Nesta seção, exploraremos alguns exemplos de padrões de navegação React Native e como implementá-los usando a biblioteca React Navigation.

1. Navegue entre os componentes da tela usando o navegador de pilha

Vamos primeiro criar uma pasta /components localizada na raiz do nosso projeto. Em seguida, criamos dois arquivos, Homescreen.js e Aboutscreen:

// Homescreen.js 
importa React de "react"; 
import { Button, View, Text } from "react-native"; 
​export
default function HomeScreen({ navigation }) { 
  return ( 
    <View style={ 
  
  { flex: 1, alignItems: "center", justifyContent: "center" } }> 
      <Text>Tela inicial</Text> 
      <Button 
        title="Ir para Sobre" 
        onPress={() => navigation.navigate("Sobre")} 
      /> 
    </View> 
  ); 
}

Observe o suporte do botão acima onPress - explicaremos o que ele faz mais tarde.

// Aboutscreen.js 
importa React, { Component } from "react"; 
importar {Botão, Visualização, Texto} de "react-native"; 
função padrão de exportação AboutScreen() { 
  return ( 
    <View style={ 
  
  { flex: 1, alignItems: "center", justifyContent: "center" }}> 
      <Text>Sobre a tela</Text> 
    </View> 
  ); 
}

A pasta do seu projeto deve ficar assim:

Vamos também fazer algumas alterações no App.js. Aqui temos que fazer as seguintes importações:

//informa ao React que implementaremos um navegador 
import { NavigationContainer } from "@react-navigation/native"; 
//cria um navegador de pilha 
import { createNativeStackNavigator } from "@react-navigation/native-stack";

É útil implementar nossa navegação no arquivo App.js raiz porque os componentes exportados de App.js são o ponto de entrada (ou componente raiz) de um aplicativo React Native e todos os outros componentes são descendentes.

Como você verá, agruparemos todos os outros componentes na função de navegação:

// 
Importação de App.js * como React de "react"; 
importar {Visualizar, Texto} de "react-native"; 
importar { NavigationContainer } de "@react-navigation/native"; 
importar {createNativeStackNavigator} de "@react-navigation/native-stack"; 
importar HomeScreen de "./components/HomeScreen"; 
importar AboutScreen de "./components/AboutScreen"; 

const Stack = createNativeStackNavigator(); 

exportar função padrão App() { 
  return ( 
    <NavigationContainer> 
      <Stack.Navigator> 
        <Stack.Screen name="Home" componente={HomeScreen} /> 
        <Stack. 
      Nome da tela="Sobre" componente={AboutScreen} /> </Stack.Navigator>
}
  );

No código acima, createNativeStackNavigator fornece uma maneira para nosso aplicativo fazer a transição entre telas, onde cada nova tela é colocada no topo da pilha. Ele está configurado para ter uma aparência familiar de iOS e Android: a nova tela desliza da direita no iOS e aparece na parte inferior no Android.

Aqui, executamos a função createNativeStackNavigator e armazenamos sua instância no Stack mutável.

Posteriormente, passaremos à nossa rota a tag Stack.Screen usando o seguinte. A rota Home corresponde à HomeScreen e a rota About corresponde à AboutScreen.

A função createStackNavigator é transmitida nos bastidores para navegar até os componentes HomeScreen e AboutScreen. Esta propriedade permite a navegação até o componente de tela especificado. É por isso que podemos usar HomeScreen.js em um botão que, quando pressionado, resulta em uma página AboutScreen, conforme mostrado abaixo:

<Button title="Ir para Sobre" onPress={() => navigation.navigate("Sobre")} />;

No código App.js, finalmente criamos um contêiner de aplicativo envolvendo o componente em uma tag NavigationContainer. Este contêiner gerencia o estado de navegação.

Para executar este aplicativo, você precisa baixar o aplicativo cliente Expo. Você pode obter versões iOS e Android. Certifique-se de que sua linha de comando aponte para a pasta do projeto e execute o seguinte comando:

início da exposição npx

Você deverá ver um código QR exibido no terminal. Use o aplicativo Expo no Android para escanear o código QR, e para o aplicativo iOS você pode escanear usando a câmera normal do iPhone, que solicitará que você clique no comando para abrir o aplicativo Expo:

2. Use a navegação por guias

A maioria dos aplicativos móveis possui várias telas. Um estilo de navegação comum em tais aplicativos móveis é a navegação baseada em guias. Aqui nos concentramos em como usar a função createBottomTabNavigator.

Antes de implementar a navegação baseada em guias, devemos primeiro instalar o módulo bottom-tabs assim:

npm install @react-navigation/bottom-tabs

Vamos adicionar outra tela ao nosso aplicativo criando um arquivo ContactScreen.js em /components:

importar React, {Componente} de "react"; 
importar {Botão, Visualização, Texto} de "react-native"; 

função padrão de exportação ContactScreen() { 
  return ( 
    <View style={ 
  
  { flex: 1, alignItems: "center", justifyContent: "center" }}> 
      <Text>Tela de contato</Text> 
    </View> 
  ); 
}

Agora vamos adicionar a importação ao topo do arquivo App.js:

importar ContactScreen de './components/ContactScreen';

Lembre-se de que é útil implementar a navegação no componente raiz App.js. Portanto, implementaremos nossa navegação por guias importando createBottomTabNavigator em App.js. Vamos substituir createStackNavigator por esta linha de código:

importar {createBottomTabNavigator} de '@react-navigation/bottom-tabs';

Além disso, execute a função createBottomTabNavigator:

const Tab = createBottomTabNavigator(); 

//código adicional... 
<NavigationContainer> 
  <Tab.Navigator inicialRouteName="Home"> 
    <Tab.Screen name="Home" component={HomeScreen} /> 
    <Tab.Screen name="About" component={AboutScreen} /> 
  </Tab.Navigator> 
</NavigationContainer>;

Adicione uma nova parte Tab.Screen da tela usando o seguinte comando:

<Tab.Navigator> 
  <Tab.Screen name="Home" componente={HomeScreen} /> 
  <Tab.Screen name="About" componente={AboutScreen} /> 
  <Tab.Screen name="Contact" componente={ContactScreen } /> 
</Tab.Navigator>

Se você executar o aplicativo npm start e abri-lo em seu cliente Expo, deverá ver a navegação inferior implementada:

3. Use a navegação de gaveta

Para começar a implementar a gaveta de navegação imediatamente, primeiro instale as dependências necessárias:

npm install @react-navigation/drawer 
npx expo install react-native-gesture-handler react-native-reanimated

A seguir, acesse a documentação do Reanimated para configurar controles de gestos em seu projeto.

Depois de concluir esta etapa, escreva estas instruções de importação em App.js:

importar "manipulador de gestos react-nativos"; //esta deve ser a primeira importação no seu código 
import { createDrawerNavigator } from "@react-navigation/drawer";

Vamos também atualizar a mutabilidade do AppNavigator:

const Gaveta = createDrawerNavigator(); 
<Drawer.Navigator inicialRouteName="Home"> 
  <Stack.Screen name="Home" componente={HomeScreen} /> 
  <Stack.Screen name="About" componente={AboutScreen} /> 
  <Stack.Screen name="Contato "component={ContactScreen} /> 
</Drawer.Navigator>

Se você iniciar o npm, poderá ver as alterações imediatamente. Deslize da esquerda para visualizar a gaveta de navegação:

Você pode personalizar a gaveta de navegação adicionando um ícone próximo ao nome da rota. Na pasta de ativos do projeto, existem atualmente três ícones:

Podemos personalizar navigationOptions adicionando ao seguinte arquivo de componente de tela:

<NavigationContainer> 
  <Drawer.Navigator inicialRouteName="Home"> 
    <Drawer.Screen 
      name="Home" 
      component={HomeScreen} 
      options={ 
  
  { //alterar a configuração da nossa tela 
        drawIcon: ({ cor, número, foco }) => { //definir o ícone: 
          return ( //o ícone será uma imagem 
            <Image 
              source={require("../assets/home-icon.png")} 
              style={ 
  
  { height: 30, width: 30 }} 
            /> 
          ); 
        }, 
      }} 
    /> 
    <Gaveta.
  
  { 
        gavetaIcon: ({ cor, número, foco }) => { //definir o ícone para todas as telas 
          return ( 
            <Image 
              source={require("../assets/about-icon.png")} 
              style={ 
  
  { altura: 30, largura: 30 }} 
            /> 
          ); 
        }, 
      }} 
    /> 
    <Drawer.Screen 
      name="Contact" 
      component={ContactScreen} 
      options={ 
  
  { 
        gavetaIcon: ({ cor, número, foco }) => { 
          return ( 
            <Image 
              source={require(".. /assets/contact-icon.png")} 
              estilo={
  
  { altura: 30, largura: 30 }} 
            /> 
          ); 
        }, 
      }} 
    /> 
  </Drawer.Navigator> 
</NavigationContainer>

O gavetaActiveTintColorprop permite aplicar qualquer cor com base no estado ativo ou inativo das guias e rótulos de navegação. Por exemplo, podemos alterar a cor do estado ativo do rótulo da gaveta de navegação. Vá até a variável Drawer.Navigator e adicione ao objeto de opções:

<Drawer.Navigator 
  inicialRouteName="Home" 
  screenOptions={ 
  
  { gavetaActiveTintColor: "#e91e63" }} 
> 
//... código adicional.

Isso resulta em uma mudança de cor:

Passe parâmetros para a tela no React Navigation

Existem duas etapas simples para passar parâmetros para uma rota:

  1. Passe parâmetros para uma rota colocando-os em um objeto como segundo parâmetro

    navegação.navigate

    Função:

    navigation.navigate('RouteName', { /* parâmetros vão aqui */ })
  2. Leia os parâmetros no componente da tela:

    export default function HomeScreen({ route, navigation }) { 
    ​//
    a variável 'route' nos fornece informações na página. 
    ​//
    Ela também armazena os parâmetros e seus valores 
    ​const
    { paramName } = route; //nosso parâmetro 'paramName' é armazenado aqui. 
    ​//..código adicional
    .. 
    ​}
    

Finalmente, para definir o título do título, podemos usar a propriedade title da propriedade options assim:

<Drawer.Screen 
  name="Home" 
  component={HomeScreen} 
  options={ 
  
  { 
    title: "Home Page", //define o título da página como 'Home page' 
  }} 
/>

para concluir

Espero que este artigo ajude você a usar rapidamente o pacote React Navigation em seus projetos React Native existentes ou futuros.

Há muito mais a fazer e o React Navigation atenderá à maioria das suas necessidades. Para saber mais, verifique a documentação do React Navigation e fique à vontade para obter o código final em meu repositório GitHub.

Acho que você gosta

Origin blog.csdn.net/weixin_47967031/article/details/132910876
Recomendado
Clasificación