skip to Main Content

I am just starting with React, I spent some days learning about it. I want to navigate my app normally before futher studying, I hope someone can correct my code. I am not achieving what I want.

I have this on my App.js

import { StatusBar } from 'expo-status-bar';
import { StyleSheet, Text, View } from 'react-native';
import { colors } from './src/utils/colors';
import { Telefone } from './src/telefone';
import { Menu } from './src/menu';
import { NavigationContainer } from '@react-navigation/native';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import { Procurar } from './src/procurar';
import  PassageiroFrm  from './src/PassageiroFrm';


function HomeScreen() {
  return (
    <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
      <Text>Home!</Text>
    </View>
  );
}

function ProcurarScreen() {
  return (
      <Procurar></Procurar>
   
  );
}

function PassageiroScreen(navigation) {
  return (
      <PassageiroFrm></PassageiroFrm>
   
  );
}

function SettingsScreen() {
  return (
    <View style={{ flex: 1,  justifyContent: 'center', alignItems: 'center' }}>
      <Text>Settings!</Text>
    </View>
  );
}
function LoginScreen() {
  return (
      <Telefone></Telefone>
  
  );
}

const Tab = createBottomTabNavigator();


export default function App({navigation}) {
  return (
    <View style={styles.container}>
   
      
    
      <NavigationContainer>
      <Tab.Navigator>
        <Tab.Screen name="login" component={LoginScreen} />
        <Tab.Screen name="cadastro" component={PassageiroScreen} />
        <Tab.Screen name="início" component={ProcurarScreen} />
        <Tab.Screen name="corridas" component={SettingsScreen} />

      </Tab.Navigator>
    </NavigationContainer>


    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: colors.azul,
   
    
  },
});

I can navigate fine from this screen. But how about navigation on other screens.
This component doesn’t navigate to "cadastro" when the button is clicked.

 import React from 'react';
import {View, Text, StyleSheet, Image} from 'react-native';
import {TextInput} from 'react-native-paper';
import { colors } from './utils/colors';
import { Button } from 'react-native';
import PassageiroFrm from './PassageiroFrm';
import { Procurar } from './procurar';
import { Link } from 'react-router-dom';
import { useNavigation } from '@react-navigation/native';

let i = 0;



export const Telefone = ( {}) => (


   

    <View style={StyleSheet.container}>
     <View style={{ justifyContent :'center', alignItems: 'center'}} >
       <Image  source={ require("./imagens/placa.jpg")}></Image>
       </View>
       <TextInput label="Entre com o seu telefone"/>
       <Button  color="#F0C228"    
       
       
       style={{ fontColor:"red",  buttonText: {
        color: "black",
      } }}    onPress={() => regiao()} title="Entrar">   </Button> 
       

        <Text>Ainda não sou passageiro</Text>
        <Button  color="#F0C228" onPress={() =>  navigation.navigate('cadastro')  } title="ser um passageiro">   </Button>
 

    </View>
    )

    function ProcurarScreen() {
        const navigation = useNavigation();
      }

    const styles = StyleSheet.create({
        container: {
            flex: 1,
        },
        text: {
            color: colors.branco
        }
    })

2

Answers


  1. Chosen as BEST ANSWER

    Actually I changed this

         <Tab.Screen name="login" component={LoginScreen} />
    

    to:

          <Tab.Screen name="cadastro" component={PassageiroFrm} /> //Component itself not a function
    

    so the navigation was available on the component

    export const Telefone = ({navigation}) => {
    
    
      return (
        <>
          <View style={StyleSheet.container}>
            <View style={{justifyContent: 'center', alignItems: 'center'}}>
              <Image source={require('./imagens/taxi_placa.jpg')}></Image>
            </View>
            <TextInput label="Entre com o seu telefone" />
            <Button
              color="#F0C228"
              style={{
                fontColor: 'red',
                buttonText: {
                  color: 'black',
                },
              }}
              onPress={() => regiao()}
              title="Entrar">
              {' '}
            </Button>
    
            <Text>Ainda não sou passageiro</Text>
            <Button color="#F0C228" onPress={() => navigation.navigate('cadastro')} title="ser um passageiro">
              {' '}
            </Button>
          </View>
        </>
      );
    };
    
    const styles = StyleSheet.create({
      container: {
        flex: 1,
      },
      text: {
        color: colors.branco,
      },
    });
    

  2. I would try the following in your Telefone component:

    import React from 'react';
    import {View, Text, StyleSheet, Image} from 'react-native';
    import {TextInput} from 'react-native-paper';
    import {colors} from './utils/colors';
    import {Button} from 'react-native';
    import PassageiroFrm from './PassageiroFrm';
    import {Procurar} from './procurar';
    import {Link} from 'react-router-dom';
    import {useNavigation} from '@react-navigation/native';
    
    let i = 0;
    
    export const Telefone = () => {
      const navigation = useNavigation();
      return (
        <>
          <View style={StyleSheet.container}>
            <View style={{justifyContent: 'center', alignItems: 'center'}}>
              <Image source={require('./imagens/placa.jpg')}></Image>
            </View>
            <TextInput label="Entre com o seu telefone" />
            <Button
              color="#F0C228"
              style={{
                fontColor: 'red',
                buttonText: {
                  color: 'black',
                },
              }}
              onPress={() => regiao()}
              title="Entrar">
              {' '}
            </Button>
    
            <Text>Ainda não sou passageiro</Text>
            <Button color="#F0C228" onPress={() => navigation.navigate('cadastro')} title="ser um passageiro">
              {' '}
            </Button>
          </View>
        </>
      );
    };
    
    const styles = StyleSheet.create({
      container: {
        flex: 1,
      },
      text: {
        color: colors.branco,
      },
    });
    

    So basically, I moved const navigation = useNavigation(); inside Telefone component.

    Good luck!

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search