J'ai le code ci-dessous dans l'écran de déconnexion
const userToken = AsyncStorage.getItem('userToken'), this.props.navigation.navigate(userToken ? 'App' : 'SignIn');
Sur l'écran de démarrage, je vérifie comme ceci
const userToken = AsyncStorage.getItem('userToken').then(() => { this.props.navigation.navigate(userToken ? 'App' : 'SignIn'); });
Après la déconnexion Sa redirection vers signer -in, mais lorsque j'ouvre à nouveau l'application, l'écran de démarrage passe à l'application plutôt qu'à la connexion
Mon code initial était comme
await AsyncStorage.removeItem('userToken').then(()=>{ setTimeout(() => { this.props.navigation.navigate('SignIn'); }, 3000);
Ce que je suis faire du mal. S'il vous plaît aviser.
Merci
5 Réponses :
Vous oubliez le paramètre de rappel,
const userToken = AsyncStorage.getItem('userToken').then((userToken) => { this.props.navigation.navigate(userToken ? 'App' : 'SignIn'); });
est-ce vraiment nécessaire, si je n'ai rien à faire avec userToken
alors comment vas-tu vérifier? la valeur retournée n'est pas définie ou contient une chaîne?
Mon code réel était comme const userToken = AsyncStorage.getItem ('userToken'), this.props.navigation.navigate (userToken? 'App': 'SignIn');
Il n'est donc pas défini, il devrait donc être redirigé vers la connexion
oui maintenant vous êtes arrivé au bon point, faites-le attendre et cela fonctionnera.
J'ai essayé ça, mais ça ne fonctionnait pas
avez-vous essayé de consigner la valeur de userToken? ce que ça donne?
Ça donne toujours un objet
eh bien, nous ne pouvons définir que des valeurs de chaîne dans le stockage asynchrone ... vous devez donc enregistrer JSON.stringify (userToken)
avec await et voir ce qu'il imprime
Avez-vous vérifié le résultat des données Async?
Par exemple:
Sur l'écran de démarrage
AsyncStorage.getItem("userToken").then(value => { if(value) { let token = JSON.parse(value); this.props.navigation.navigate(token ? 'App' : 'SignIn'); } else { this.props.navigation.navigate('SignIn'); } });
Je n'ai pas besoin du résultat des données
Ok, mais vous pouvez vérifier s'il apparaît ou non. Sur la base de ce statut, vous pouvez naviguer.
que ce soit indéfini
J'ai implémenté la même fonctionnalité que celle-ci
async logout() { await AsyncStorage.clear(); Actions.SignIn(); // for navigating back to sign in screen if using router flux this.props.navigation.navigate("SignIn"); // if using react-navigation }
Veuillez vérifier le fichier AndroidManifest.xml
et remplacer android: allwoBackup = ture
par android: allwoBackup = false
. J'espère que cela fonctionnera. Lorsque la sauvegarde est vraie, elle sauvegarde toujours les informations de connexion.
Si quelqu'un est encore confus ou trouve la solution ici
Alors voici la solution:
const userToken = await AsyncStorage.getItem('userToken').then(() => { this.props.navigation.navigate(userToken ? 'App' : 'SignIn'); });
Il suffit d'ajouter wait
lorsque vous êtes obtenir une valeur de clé depuis AsyncStorage
J'ai aussi eu ce problème BTW.
tant que vous utilisez
wait
... il n'y a pas besoin depuis
Oui, j'essaye de l'exécuter quand même