我对React Navigation和React Native的导航有问题 . 它是关于重置导航和返回主屏幕 .
我在DrawerNavigator中构建了一个StackNavigator,主屏幕和其他屏幕之间的导航工作正常 . 但问题是,导航堆栈的增长和增长 . 我不知道如何从堆栈中删除屏幕 .
例如,当从主屏幕进入设置屏幕,然后进入输入屏幕并最后再次进入主屏幕时,主屏幕在堆栈中是两次 . 使用后退按钮我不会离开应用程序,但再次进入输入屏幕 .
再次选择主页按钮时,堆栈的重置会很好,但我不知道如何执行此操作 . Here有人试图帮助其他有类似问题的人,但解决方案对我不起作用 .
const Stack = StackNavigator({
Home: {
screen: Home
},
Entry: {
screen: Entry
},
Settings: {
screen: Settings
}
})
export const Drawer = DrawerNavigator({
Home: {
screen: Stack
}},
{
contentComponent: HamburgerMenu
}
)
这是抽屉屏幕的一个简单示例
export default class HamburgerMenu extends Component {
render () {
return <ScrollView>
<Icon.Button
name={'home'}
borderRadius={0}
size={25}
onPress={() => { this.props.navigation.navigate('Home')}}>
<Text>{I18n.t('home')}</Text>
</Icon.Button>
<Icon.Button
name={'settings'}
borderRadius={0}
size={25}
onPress={() => { this.props.navigation.navigate('Settings')}}>
<Text>{I18n.t('settings')}</Text>
</Icon.Button>
<Icon.Button
name={'entry'}
borderRadius={0}
size={25}
onPress={() => { this.props.navigation.navigate('Entry')}}>
<Text>{I18n.t('entry')}</Text>
</Icon.Button>
</ScrollView>
}
}
我希望你能帮助我 . 这是导航的重要部分,解决方案会很棒!
7 回答
这是我怎么做的:
至少用'Home'替换'Menu' . 您可能还希望将this.props.navigation改编为您的实现 .
在您的StackNavigator和DrawerNavigator中,您使用Home作为键,我认为它必须是唯一的,这就是它创建问题的原因 . 你可以尝试用DrawerNavigator中的Stack替换Home .
希望这会有所帮助:)
弹出操作会将您带回到堆栈中的上一个屏幕 . n参数允许您指定要弹出的屏幕数量 .
n - number - 要弹回的屏幕数 .
从'react-navigation'导入;
const popAction = StackActions.pop({n:1,});
this.props.navigation.dispatch(popAction);
我是这样做的:
这会在导航 from a child navigator to a parent navigator时擦除堆栈 .
如果您收到此错误,请执行此操作:
对于动画,我使用
我只是自己控制所有的动画 . 通过
<Animatable.View>
包装它们,将它们放在您想要的任何组件上 .答案是 createSwitchNavigator ,那些没有叠加你的导航 . 在带有主屏幕/堆栈的createSwitchNavigator中添加您的身份验证屏幕/导航器 .
这样,当您从家中导航到登录时,不会保留堆栈 .
有关更多信息https://reactnavigation.org/docs/en/auth-flow.htmlLoginStack
对于最新版本的react-navigation,你应该使用StackActions来重置堆栈,这里是一段代码:
要使用Back,您需要找到与路径关联的唯一键 . 在导航减速器中,您可以搜索现有状态以使用该路径查找堆栈中的第一个路径,获取其密钥并将其传递给Back . 然后返回将导航到您给出的路径之前的屏幕 .