我有3个屏幕。 A =>登录,B =>信息中心,C =>个人资料。
最初,当用户未登录时,将显示“登录”屏幕。登录后,我已使用AsyncStorage保存userId(我从API响应中获取)。 如果用户已经登录并打开应用程序,则我已将用户重定向到“仪表板”页面。
这些是我的代码实现面临的问题。
我要实现的是,登录后,直到用户按下注销按钮,用户才不能进入登录屏幕。
答案 0 :(得分:1)
从“登录屏幕”导航到“仪表板”时,只需使用开关导航器而不是堆栈导航器即可实现。
const MainStack = createStackNavigator({
DashboardScreen: Dashboard,
ProfileScreen: Profile
});
export default createAppContainer(createSwitchNavigator({
LoginScreen: Login,
Main: MainStack
}));
答案 1 :(得分:0)
您需要重置导航历史记录才能实现
这是我的一个项目中的片段,我需要这样做:
this.props.navigation.reset([NavigationActions.navigate({ routeName: 'DevicesList'})], 0);
答案 2 :(得分:0)
为此,我建议使用SwitchNavigator
(如果使用react-navigation)。这将使前一个屏幕(在本例中为您的LoginScreen
)卸下,除非您明确告诉它导航到该屏幕,否则您将无法返回该屏幕。
否则,您仍然可以在DashBoard屏幕中使用自定义的backHandling,并使用react-navigaton withNavigationFocus
HOC。
componentDidMount
将与您的第一次尝试保持不变。您需要使用componentDidUpdate
并检查isFocused
道具,例如:
componentDidUpdate = prevProps => {
if (prevProps.isFocused !== this.props.isFocused) {
this.props.isFocused ? this.backHandler = BackHandler.addEventListener('hardwareBackPress', this.handleBackPress) :
this.backHandler.remove()
}
}
让我知道您是否对其中一种解决方案有疑问
答案 3 :(得分:0)
React Navigation v5 文档涵盖了这个用例。 documentation link