Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

243
Views
¿Cómo puedo actualizar mi estado antes de renderizar el método de renderizado?

Simplemente quiero que mi código de método de renderizado se ejecute después del estado de actualización en useEffect .

Guardo mi token en asyncStorage y ahora quiero que, si existe el token, se redirija a la página de homePage de lo contrario, regrese a la página de inicio de loginPage . Pero el problema es que el método de renderizado se ejecuta antes de actualizar mi estado en useEffect . Y me mantiene en la página de inicio de loginPage incluso si tenía token.

Mi código está a continuación:

 import React, { useEffect, useState } from 'react'; import { createStackNavigator } from '@react-navigation/stack'; import { NavigationContainer } from '@react-navigation/native'; import { StyleSheet, Text, View} from 'react-native'; import AsyncStorage from '@react-native-async-storage/async-storage'; import { useLinkProps, useNavigation, CommonActions } from '@react-navigation/native'; import MainScreen from './src/screens/MainScreen'; import SignIn from './src/screens/SignIn'; const Stack = createStackNavigator(); const App = props => { const [isSigned, setIsSigned] = useState(false); useEffect(async () => { let token = await AsyncStorage.getItem("@token"); console.log("token", token); if (token) { setIsSigned(true); props.navigation.navigate('MainScreen'); } else { setIsSigned(false); props.navigation.navigate('SignIn'); } }, []) return ( <NavigationContainer> <Stack.Navigator initialRouteName={isSigned ? "MainScreen" : "SignIn"} screenOptions={{ headerShown: false }} > <Stack.Screen name="Login" component={SignIn} /> <Stack.Screen name="MainScreen" component={MainScreen} /> </Stack.Navigator> </NavigationContainer> ); }; const styles = StyleSheet.create({ container: { marginTop: Platform.OS === 'android' ? '3%' : '10%' } }); export default App;
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Puede agregar otro valor de estado para representar condicionalmente su marcado:

 import React, { useEffect, useState } from 'react'; import { createStackNavigator } from '@react-navigation/stack'; import { NavigationContainer } from '@react-navigation/native'; import { StyleSheet, Text, View} from 'react-native'; import AsyncStorage from '@react-native-async-storage/async-storage'; import { useLinkProps, useNavigation, CommonActions } from '@react-navigation/native'; import MainScreen from './src/screens/MainScreen'; import SignIn from './src/screens/SignIn'; const Stack = createStackNavigator(); const App = props => { // Manage state whether component has been loaded. const [isLoaded, setIsLoaded] = useState(false); const [isSigned, setIsSigned] = useState(false); useEffect(() => { let token = await AsyncStorage.getItem("@token"); if (token) { setIsSigned(true); props.navigation.navigate('MainScreen'); } else { setIsSigned(false); props.navigation.navigate('SignIn'); } // Tell your component it's been loaded. setIsLoaded(true); }, []); // Don't render if not loaded. if (!isLoaded) return <></>; return ( <NavigationContainer> <Stack.Navigator initialRouteName={isSigned ? "MainScreen" : "SignIn"} screenOptions={{ headerShown: false }} > <Stack.Screen name="Login" component={SignIn} /> <Stack.Screen name="MainScreen" component={MainScreen} /> </Stack.Navigator> </NavigationContainer> ); }
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!