React native App.js中的Asyncstorage根据存储值登录

React native App.js中的Asyncstorage根据存储值登录,react-native,asyncstorage,React Native,Asyncstorage,这是我在app.js中的实现,我试图根据用户是否登录的值有条件地设置初始屏幕 但是在从AsyncStorage返回值之前调用该方法 import React, { Component } from 'react'; import { AsyncStorage } from 'react-native'; import Login from './screens/Login'; import Home from './screens/Home'; import { AppInit } from '

这是我在
app.js
中的实现,我试图根据用户是否登录的值有条件地设置初始屏幕

但是在从
AsyncStorage
返回值之前调用该方法

import React, { Component } from 'react';
import { AsyncStorage } from 'react-native';
import Login from './screens/Login';
import Home from './screens/Home';
import { AppInit } from './utils/AppInit';

export default AppInit({
  initScreen: AsyncStorage.getItem("UserDetailsStored").then((value) => { console.log("stored value ", value); value == "false" ? "Login" : "Home" }),
  screens: {
    Login,
    Home,
    Screen1,
    Screen2,
    Profile
  }
});
AppInit的代码,使用react native router flux

const AppInit = (screen) => {
    return App = () => {
        return (
            <Provider store={store}>
                <PersistGate loading={null} persistor={persistor}>
                    <NetworkProvider>
                        <Router>
                            <Stack key="root">
                                {_.map(screen.screens, (name, key) => {
                                    return <Scene initial={key == screen.initScreen ? true : false} hideNavBar key={key} component={name} />
                                })}
                            </Stack>
                        </Router>
                    </NetworkProvider>
                </PersistGate>
            </Provider>
        )
    }
}
const AppInit=(屏幕)=>{
返回应用=()=>{
返回(
{{{.map(screen.screens,(名称,键)=>{
返回
})}
)
}
}

我尝试过改变app.js的方法,但也没用。谢谢

我建议使用一个额外的屏幕来检查登录

在那里检查异步存储值。因为异步存储需要时间来获取数据

因此,您需要先检查是否提取了数据,然后检查您的登录数据。 若未提取数据,则在检查登录后在屏幕上显示所需的图像、数据或任何内容,并导航到所需的屏幕

请参见此,将此屏幕用作要加载到应用程序中的第一个屏幕

假设我们有
SyncScreen

import React, { Component } from 'react'
import { Text, View, AsyncStorage } from 'react-native'

export default class SyncScreen extends Component {
  componentWillMount=()=>{
 AsyncStorage.getItem("UserDetailsStored")
 .then((value) => { 
    if(value){
      // navigate to somewhere.....
    }
    else{
      // navigate to login..
    }
  }
),
}
  render() {
    return (
      <View>
        <Text> Wait a minute</Text>
      </View>
    )
  }
}
import React,{Component}来自“React”
从“react native”导入{Text,View,AsyncStorage}
导出默认类SyncScreen扩展组件{
组件将装入=()=>{
AsyncStorage.getItem(“UserDetailsStored”)
.然后((值)=>{
如果(值){
//导航到某处。。。。。
}
否则{
//导航到登录。。
}
}
),
}
render(){
返回(
等一下
)
}
}