无法使用 AsyncStorage 存储登录的用户数据 API

Not able to store logged In user data, using AsyncStorage API

我是 React Native 的新手,所以请多多包涵。

这是我的访问令牌的异步存储,令牌是作为来自 API 的响应的参数之一。此代码在登录屏幕中

async getToken() {

 try{
 const token = await AsyncStorage.getItem('ACCESS_TOKEN');
 if(token !== null) {
   this.props.navigation.navigate('Profile')
 }
 else{
   this.props.navigation.navigate('Login')
 }
 }
  catch (error){
  console.log('Something went wrong');
 }
 }

 async storeToken(accessToken) {

  try{
   await AsyncStorage.setItem('ACCESS_TOKEN', accessToken);
       this.getToken();
   }
    catch (error) {
     console.log('something went wrong');
   }

   }

当我登录时,它会将我导航到个人资料页面,但在刷新应用程序后它会返回到登录页面或我的导航树

这是我的app.js设置导航的地方

const TodoNav = StackNavigator({

 Login: { screen: Login },
 SignUp: { screen: SignUp },
 ForgotPassword: { screen: ForgotPassword },
 Profile: { screen: Profile },
 MenuScreen: { screen: MenuScreen },
  }, {
      mode: 'modal'
  })

 export default class App extends Component{

  render() {
   return (
     <TodoNav />
      );
    }
   }

AsyncStorage 不负责保存应用程序的导航状态,它会存储您传递给它的数据。请参阅 AsyncStorage 的文档以获取更多详细信息(Here) 为了显示主屏幕,您需要在 App.js 检查您的异步存储数据 然后相应地创建导航堆栈,例如:

如果找到AccessToken:

 const TodoNavAuthenticated = StackNavigator({

 Profile: { screen: Profile },
 MenuScreen: { screen: MenuScreen },
  }, {
      mode: 'modal'
  })

如果没有找到Accesstoken,说明您还没有登录,所以:

const TodoNav = StackNavigator({

 Login: { screen: Login },
 SignUp: { screen: SignUp },
 ForgotPassword: { screen: ForgotPassword },
 Profile: { screen: Profile },
 MenuScreen: { screen: MenuScreen },
  }, {
      mode: 'modal'
  })

这需要在您使用 <ToDoNav /> 时检查,即在您的 App.js render() 方法中。