我在React Native中构建一个移动应用,其认证过程类似于Whatsapp。如果initialRoute
和{{1中没有令牌,我想将AsyncStorage
设置为'Signup'。 }}(如果存在令牌)。我使用以下代码尝试了此操作,但是即使dashboard
中没有令牌,它也始终将我指向dashboard
。我们非常感谢您。任何建议。>
抽屉
AsyncStorage
编辑
import { AsyncStorage } from 'react-native'
import Signup from '../screens/SignupScreen'
import CustomDrawer from './CustomDrawer'
const DrawNavigator = createDrawerNavigator({
Dashboard: { screen: Home },
Signup: { screen: Signup},
},{
initialRouteName: AsyncStorage.getItem('token') ? 'Dashboard' : 'Signup',
contentComponent: CustomDrawer,
drawerOpenRoute: 'drawerOpen',
drawerCloseRoute: 'drawerClose',
drawerToggleRoute: 'drawerToggle'});
export default DrawNavigator;
但是即使没有存储令牌,应用程序仍然可以访问async function checkToken(){
var token = await AsyncStorage.getItem('token')
return token ? true : false
}
initialRouteName: checkToken() ? 'Dashboard' : 'Signup',
答案 0 :(得分:2)
AsyncStorage是异步工作的,因此在您的条件下解释的表达式是getItem函数产生的Promise对象。
您可以尝试使用await
语句来阻止执行,直到您知道是否有令牌为止。不建议这样做,因为您将阻止应用程序的初始化。
您还可以尝试使用默认路由,该路由将在componentDidMount中检查令牌,然后根据结果进行重定向。
旁注:
从"react-native"
导入的AsyncStorage现在已被弃用,并将在以后的React-Native版本中删除。考虑改为安装"@react-native-community/async-storage"
。
答案 1 :(得分:0)
Asyncstorage.getItem()是一个异步调用。因此,您必须使用异步等待。