在本机反应中有条件地设置初始路由

Set initial route conditionally in react native

我正在 React Native 中构建一个移动应用程序,其身份验证过程类似于 Whatsapp.I 如果 [=13] 中没有令牌,我想将 initialRoute 设置为 'Signup' =] and dashboard if token is present.I 用下面的代码尝试了这个,但它总是指向 dashboard 即使 AsyncStorage.[=18 中没有标记=]

抽屉

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

但即使没有存储令牌,该应用仍然可以访问 Dashboard

Asyncstorage.getItem() 是一个异步调用。所以你必须使用异步等待。

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

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

您也可以尝试使用一个默认路由来检查 componentDidMount 中的令牌,然后根据结果进行重定向。

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