Home > Net >  pass value from one componet to another in react natve
pass value from one componet to another in react natve

Time:11-29

i am trying to pass value from login and register into dashbord since sign is a unique compont i dont know how to pass log from login and register can someone help

sign.js

export default function Sign({navigation}) {
  async function onGoogleButtonPress() {
    await GoogleSignin.hasPlayServices();
    const userInfo = await GoogleSignin.signIn();
    setuserInfo(userInfo);
   navigation.navigate('dash', {userInfo});
  }
  return (
    <View style={styles.prheight}>
      <View style={styles.buttonw}>
        <GoogleSigninButton
          style={{width: 192, height: 48}}
          size={GoogleSigninButton.Size.Wide}
          color={GoogleSigninButton.Color.Light}
          onPress={onGoogleButtonPress}
          // disabled={this.state.isSigninInProgress}
        />
      </View>
    </View>
  );
}

register.js

export default function Register(props) {
  return (
    <View style={styles.prheight}>
      <View style={styles.buttonw}>
        <Sign navigation={props.navigation} log={name:"register"} />
      </View>
    </View>
  );
}

login

export default function login(props) {
  return (
    <View style={styles.prheight}>
      <View style={styles.buttonw}>
        <Sign navigation={props.navigation} log={name:"login"} />
      </View>
    </View>

dash.js

export default function dash(props) {
  const [text, setTextbaby] = useState();

  const {userInfo} = props?.route?.params;
  console.log(props.log);

CodePudding user response:

You should pass log prop in Sign component and take it like this.

export default function Sign({ navigation, log }) {
 async function onGoogleButtonPress() {
    await GoogleSignin.hasPlayServices();
    const userInfo = await GoogleSignin.signIn();
    setuserInfo(userInfo);
   navigation.navigate('dash', {userInfo, log});
  }
// some code

}

after all, log will be located inside props.route.params object

export default function dash(props) {
  const [text, setTextbaby] = useState();

  const {userInfo, log} = props?.route?.params;
  console.log(log);

}

UPDATED: use double brackets (in order to pass object)

log={{name: "register"}}
log={{name: "login"}}

CodePudding user response:

we can pass a value from one screen to another screen through async-storage react-navigation or declare a value globally. To pass a value from login to dashboard I recommend you to see this async-storage Docs https://react-native-async-storage.github.io/async-storage/docs/install
async-storage store a value in App while React navigation does not store a value in App, React navigation just transfer value from one screen to another. react navigation Docs https://reactnavigation.org/docs/navigating/ passing a value from one component to another

import { Text, View, Button } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';

function HomeScreen({ navigation }) {
  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Text>Home Screen</Text>
      <Button
        title="Go to Details"
        onPress={() => {
          /* 1. Navigate to the Details route with params */
          navigation.navigate('Details', {
            itemId: 86,
            otherParam: 'anything you want here',
          });
        }}
      />
    </View>
  );
}

function DetailsScreen({ route, navigation }) {
  /* 2. Get the param */
  const { itemId } = route.params;
  const { otherParam } = route.params;
  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Text>Details Screen</Text>
      <Text>itemId: {JSON.stringify(itemId)}</Text>
      <Text>otherParam: {JSON.stringify(otherParam)}</Text>
      <Button
        title="Go to Details... again"
        onPress={() =>
          navigation.push('Details', {
            itemId: Math.floor(Math.random() * 100),
          })
        }
      />
      <Button title="Go to Home" onPress={() => navigation.navigate('Home')} />
      <Button title="Go back" onPress={() => navigation.goBack()} />
    </View>
  );
}

const Stack = createNativeStackNavigator();

export default function App() {
  return (
    <NavigationContainer>
      <Stack.Navigator>
        <Stack.Screen name="Home" component={HomeScreen} />
        <Stack.Screen name="Details" component={DetailsScreen} />
      </Stack.Navigator>
    </NavigationContainer>
  );
}```
  • Related