react-native - 如何选择有条件的 createStackNavigator 屏幕?
问题描述
我正在尝试根据 Redux 数据选择条件屏幕。我在一个屏幕堆栈中有两个屏幕,这个屏幕堆栈也是 TabNavigator 的一部分(注销的屏幕也应该与选项卡一起显示)。如果用户已登录,我需要显示CheckScreen,否则CheckScreenLoggedOut。我尝试initialRouteName
有条件地设置,但它仅在登录后才显示 CheckScreenLoggedOut。
我该如何实现这个逻辑?
这是我的createStackNavigator
部分:
const CheckScreenStack = createStackNavigator(
{
CheckSendLoggedOut: {
screen: IntroScreen,
navigationOptions: ({navigation}) => ({
headerLeft: (
<View>
<TestModeIcon/>
</View>
),
}),
},
CheckScreen: {
screen: CheckScreen,
navigationOptions: ({navigation}) => ({
headerRight: (
<View>
<TouchableOpacity title='' onPress={() => { navigation.navigate('NotificationsScreen'); }}>
<NotificationTabBarIcon/>
</TouchableOpacity>
</View>
)
}),
},
},
{
initialRouteName: (typeof store.getState().userData !== "undefined") ? 'CheckScreen' : 'CheckSendLoggedOut'
}
);
解决方案
我已经通过使用 connect 访问 redux 状态来实现这一点,您可以执行以下操作:
const CheckScreenStack = ({ userData }) => {
const Stack = createStackNavigator(
{
...
},
{
initialRouteName: (typeof userData !== "undefined") ? 'CheckScreen' : 'CheckSendLoggedOut'
}
);
return Stack;
}
const mapStateToProps = ({ userData }) => {
return { userData };
};
export default connect(
mapStateToProps,
{},
)(CheckScreenStack);
推荐阅读
- javascript - JS - 如何将动态对象添加到数组 [代码]
- linux - 带有 LEGACY_MAP_MASK 的 MAP_SHARED_VALIDATE 在 mmap() 中产生 EINVAL 错误
- php - 如何更改日历中的默认值
- python - 使用 Azure 表单识别器提取 PDF 表数据
- javascript - 在 discord.js 中创建重启命令
- sql - SQL中某列的行号
- amazon-web-services - AWS -SES 验证企业电子邮件
- c - isdigit 函数未捕获 argv[] 中的混合值
- mysql - 在 Mysql 中使用重复值停止自动递增
- hash - 如何在 SAS 的哈希表中使用 %let 宏