'Return next page and close current page after loads in React Native

I'm newbie in React-native and I'm confused on how can I pass the parameter to another js file when returning a View, The second problem , The code I used below is when returning home the previous page(login) didn't close or gone and the home didn't view properly. I'm aware using react-nativigation but it's hard for me to implement but is there any other way to direct login when it loads? please need some help for this , here's my code,

enter image description here

Login.js After login from googlesignin when the state loaded it goes to another activity

import { Home } from "../screens"

 render() {
    return (
      <View style={styles.container}>
        <GoogleSigninButton
          style={{ width: 222, height: 48 }}
          size={GoogleSigninButton.Size.Wide}
          color={GoogleSigninButton.Color.Dark}
          onPress={this.signIn}
        />
        {this.state.loaded ?
          <View style={{ width: 160, marginTop: 10 }}>
            {renderLogin(this)}  //return some value
          </View>
          : <Text>Not signIn</Text>}
      </View>
    );
  }
}
function renderLogin(ts) {
  return (
    <Home />  // i want to pass  value to home js example: 'ts.state.userGoogleInfo.user.photo'
  )
}

Whole code in Login.js

import React, { Component } from 'react';
import { View, StyleSheet, ToastAndroid, Button, Text, Image } from "react-native";
import { Home } from "../screens"
import {
  GoogleSignin,
  GoogleSigninButton,
  statusCodes,
} from '@react-native-community/google-signin';
GoogleSignin.configure({
  webClientId: '2622122222248-3v21124124124124.apps.googleusercontent.com',
  offlineAccess: true, // if you want to access Google API on behalf 
});
class Login extends Component {
  constructor(props) {
    super(props)
    this.state = {
      userGoogleInfo: {},
      loaded: false
    }
  }
  static navigationOptions = {
    title: 'Login',
  };
  signIn = async () => {
    try {
      console.log("Processing");
      await GoogleSignin.hasPlayServices();
      const userInfo = await GoogleSignin.signIn();
      this.setState({
        userGoogleInfo: userInfo,
        loaded: true
      })
      console.log(this.state.userGoogleInfo);
      console.log(this.state.userGoogleInfo.user.name)
      console.log(this.state.userGoogleInfo.user.email)
    } catch (error) {
      if (error.code === statusCodes.SIGN_IN_CANCELLED) {
        console.log("e 1");
      } else if (error.code === statusCodes.IN_PROGRESS) {
        console.log("e 2");
      } else if (error.code === statusCodes.PLAY_SERVICES_NOT_AVAILABLE) {
        console.log("e 3");
      } else {
        console.log(error.message);
      }
    }
  };

  render() {
    return (
      <View style={styles.container}>
        <GoogleSigninButton
          style={{ width: 222, height: 48 }}
          size={GoogleSigninButton.Size.Wide}
          color={GoogleSigninButton.Color.Dark}
          onPress={this.signIn}
        />
        {this.state.loaded ?
          <View style={{ width: 160, marginTop: 10 }}>
            {renderLogin(this)}
          </View>
          : <Text>Not signIn</Text>}
      </View>
    );
  }
}
function renderLogin(ts) {
  return (
    <Home />
  )
}
const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#000000',
    padding: 15,
  },
  buttons: {
    width: 20
  }
});
export default Login;

Home.js

import React from 'react';
import {
    StyleSheet,
    View,
    Text,
    ScrollView,
    FlatList,
    TouchableOpacity,
    Image,
    ImageBackground,
    LogBox
} from 'react-native';

import { PriceAlert, TransactionHistory } from "../components"
import { dummyData, COLORS, SIZES, FONTS, icons, images} from '../constants';

const Home = ({ navigation }) => {

    const [trending, setTrending] = React.useState(dummyData.trendingCurrencies)
    const [transactionHistory, setTransactionHistory] = React.useState(dummyData.transactionHistory)

    function renderHeader(){

        const renderItem = ({item, index}) =>(
            <TouchableOpacity
                style={{
                    width:155,
                    paddingVertical:SIZES.padding,
                    paddingHorizontal:SIZES.padding,
                    marginLeft: index == 0 ? SIZES.padding : 0,
                    marginRight: SIZES.radius,
                    borderRadius: 15,
                    backgroundColor: COLORS.white  
                }}
                onPress={() => navigation.navigate("CryptoDetail", {currency:item})}
                
            >
                {/* Currency*/}
                <View style={{ flexDirection:'row'}}>
                    <View>
                        <Image
                            source={item.image}
                            resizeMode="cover"
                            style={{
                                marginTop: 5,
                                width: 25,
                                height: 25
                            }}
                        />
                    </View>
                    <View style={{marginLeft: SIZES.base}}>
                        <Text style={{...FONTS.h3}}>{item.currency}</Text>
                        <Text style={{ color:COLORS.gray, ...FONTS.body3 }}></Text>
                    </View>
                </View>
                {/* value*/}
                {/* <View style={{ marginTop:SIZES.radius}}> */}
                    {/* <Text style={{...FONTS.h6}}>₱{item.amount}</Text> */}
                    {/* <Text style={{color: item.type =="I" ? COLORS.green : COLORS.red, ...FONTS.h5}}>₱{item.amount}</Text> */}

                {/* </View> */}
            </TouchableOpacity>
            
        )
        return(
            <View
                style={{
                    width: "100%",
                    height: 210,
                    ...styles.shadow
                }}
            >
                <ImageBackground
                    source={images.banner}
                    resizeMode="cover"
                    style={{
                        flex: 1,
                        alignItems:'center'
                    }}
                >
                    {/* Header Bar */}
                    <View
                        style={{
                            marginTop:SIZES.padding *1,
                            width: "100%",
                            alignItems: "flex-end",
                            paddingHorizontal: SIZES.padding
                        }}
                    >
                        <TouchableOpacity
                        
                            style={{
                                width: 20,
                                height: 20,
                                alignItems: "center",
                                justifyContent:"center"
                            }}
                            
                            onPress={() => console.log("Notification on pressed")}
                        >
                            <Image
                                source={icons.notification_white}
                                resizeMode="contain"
                                style={{flex: 1}}
                            />
                        </TouchableOpacity>
                    </View>
                    {/* Balance */}
                    <View
                        style={{
                            alignItems: 'center',
                            justifyContent:'center'
                        }}
                    >
                        <Text style={{ color: COLORS.white, ...FONTS.h3}}>Available Balance</Text>
                        <Text style={{ marginTop:SIZES.base, color:COLORS.white, ...FONTS.h2}}>₱{dummyData.portfolio.balance}</Text>
                        <Text style={{color:COLORS.white, ...FONTS.body5}}>{dummyData.portfolio.changes} Last 24 hours</Text>
                    </View>
                    {/* Trending */}
                    <View
                        style={{
                            position:'absolute',
                            bottom: "-30%"
                        }}
                        >
                            <Text style={{ marginLeft:SIZES.padding,
                            color: COLORS.white, ...FONTS.h3 }}>Dashboard</Text>
                            <FlatList
                                contentContainerStyle={{marginTop:SIZES.base}}
                                data={trending}
                                renderItem={renderItem}
                                keyExtractor={item => `${item.id}`}
                                horizontal
                                showsHorizontalScrollIndicator={false}
                            />

                    </View>
                </ImageBackground>
            </View>
        )
    }
    function renderAlert(){
        return (
            <PriceAlert/>
        )
    }
    function renderNotice(){
        return (
            <View
                style={{
                    marginTop:SIZES.padding-6,
                    marginHorizontal: SIZES.padding,
                    padding: 12,
                    borderRadius:SIZES.radius,
                    backgroundColor:COLORS.secondary,
                    ...styles.shadow
                }}
            >
                <Text style={{color:COLORS.white, ...FONTS.h4}}>Announcement:</Text>
                <Text style={{marginTop:SIZES.base, color:COLORS.white, ...FONTS.body4, lineHeight:18}}>We offer you an application to guide and track your data.
                    Learn how to use this application by reading instructions and guide.
                </Text>

                <TouchableOpacity
                    style={{
                        marginTop:SIZES.base
                    }}
                    onPress={()=> console.log("Learn More")}
                >
                    <Text style={{ textDecorationLine: 'underline',
                    color:COLORS.green, ...FONTS.h4}}>Learn more
                    </Text>
                </TouchableOpacity>
            </View>
        )
    }

    function renderTransactionHistory(){
        return (
            <TransactionHistory
                customContainerStyle={{ ...styles.shadow}}
                history={transactionHistory}
            
            />
        )
    }
    return (
        <ScrollView>
            <View style={{ flex:1, paddingBottom:130 }}>
                {renderHeader()}
                {renderAlert()}
                {renderNotice()}
                {renderTransactionHistory()}

            </View>
        </ScrollView>
    )
}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        alignItems: 'center',
        justifyContent: 'center'
    },
    shadow: {
        shadowColor: "#000",
        shadowOffset: {
            width: 0,
            height: 4,
        },
        shadowOpacity: 0.30,
        shadowRadius: 4.65,

        elevation: 8,
    }
})

export default Home;

Apps.js

import React from 'react';
import { Transaction, TevDetail, Login } from "./screens";
import { createStackNavigator } from "@react-navigation/stack";
import { NavigationContainer } from '@react-navigation/native';
import SplashScreen from 'react-native-splash-screen';
import Tabs from "./navigation/tabs";


const Stack = createStackNavigator();

const App = () => {
  React.useEffect(() => {
    SplashScreen.hide()
  }, [])
  return (
    <NavigationContainer>
      <Stack.Navigator
        screenOptions={{
          headerShown: false
        }}
        initialRouteName={'Login'}
      >
        <Stack.Screen
          name="Home"
          component={Tabs}
        />
        <Stack.Screen
          name="TevDetail"
          component={TevDetail}
        />
        <Stack.Screen
          name="Transaction"
          component={Transaction}
        />
        <Stack.Screen
          name="Login"
          component={Login}
        />
      </Stack.Navigator>
    </NavigationContainer>
  )
}

export default App;


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source