有条件地在react native

时间:2019-07-05 14:13:08

标签: react-native asyncstorage

我在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',

2 个答案:

答案 0 :(得分:2)

AsyncStorage是异步工作的,因此在您的条件下解释的表达式是getItem函数产生的Promise对象。

您可以尝试使用await语句来阻止执行,直到您知道是否有令牌为止。不建议这样做,因为您将阻止应用程序的初始化。

您还可以尝试使用默认路由,该路由将在componentDidMount中检查令牌,然后根据结果进行重定向。

旁注: 从"react-native"导入的AsyncStorage现在已被弃用,并将在以后的React-Native版本中删除。考虑改为安装"@react-native-community/async-storage"

答案 1 :(得分:0)

Asyncstorage.getItem()是一个异步调用。因此,您必须使用异步等待。