我试图回到两个屏幕。目标是从EditPage
转到Cover
。这是我的导航堆栈:
Main -> Cover -> EditCover -> EditPage
我阅读了文档并说它提供了您想要返回的屏幕的关键字,这是我的代码:
this.props.navigation.dispatch(NavigationActions.back({key: 'EditCover'}));
我也尝试过(没有运气):
this.props.navigation.dispatch(NavigationActions.back('EditCover'));
this.props.navigation.dispatch(NavigationActions.back({key: 'EditCover'}));
this.props.navigation.dispatch(NavigationActions.back({routeName: 'EditCover'}));
this.props.navigation.goBack('EditCover');
this.props.navigation.goBack({key: 'EditCover'});
this.props.navigation.goBack({routeName: 'EditCover'});
所有这一切的有趣之处在于我没有错误。调用代码时没有任何反应......
P.S。如果我想回到一个屏幕,这段代码可以正常工作:
this.props.navigation.goBack(null);
P.S.S。万一有人遇到这个问题之前有解决方案。这个黑客现在有效:
this.props.navigation.goBack(null);
this.props.navigation.goBack(null);
答案 0 :(得分:31)
goBack()
的key
属性是动态创建的字符串,每当导航到新路由时由react-navigation
创建。
它存储在this.props.navigation.state.key
。
因此,如果您想从EditPage
转到Cover
,您需要做的是将EditCover
的密钥传递给EditPage
,然后致电{ {1}}使用密钥。
goBack()
的密钥,而是Cover
?因为反应导航只提供方法goBack(key)
,从密钥返回,而不是返回密钥。
(可选)提供一个键,指定要返回的路径。 默认情况下,goBack将关闭从中调用它的路由。如果 目标是回到任何地方,而不指定得到什么 关闭,调用.goBack(null);
<强> EditCover.js 强>
EditCover
<强> EditPage.js 强>
render() {
const { state, navigate } = this.props.navigation;
return (
<View>
<Button title="Go to Page" onPress={ () => {
/* pass key down to *EditPage* */
navigate('EditPage', { go_back_key: state.key });
}} />
</View>
);
}
答案 1 :(得分:4)
正确的方法是使用StackNavigation:
const AppNavigator = createStackNavigator({
Main: {screen: MainScreen},
Cover: {screen: CoverScreen},
EditCover: {screen: EditCoverScreen},
EditPage: {screen: EditPageScreen},
}, {
initialRouteName: 'Main'
});
class App extends React.Component {
render() {
return <AppNavigator/>;
}
}
根据您的问题,这是屏幕导航的顺序,因此当您 goBack(null)时,如果您位于
EditPage(goBack)-> EditCover(goBack)->封面(goBack)-> Main
您必须在组件中像这样调用 goBack(null):
this.props.navigation.goBack(null);
这是正确的方法。
答案 2 :(得分:3)
对于新版本的反应导航,您可以使用StackActions
如下:
import { StackActions } from "react-navigation";
const popAction = StackActions.pop({n: 1});
this.props.navigation.dispatch(popAction);
这将使您返回到父屏幕
答案 3 :(得分:3)
一般来说,我们可以使用以下两个命令
this.props.navigation.goBack()
this.props.navigation.dispatch(NavigationActions.back())
在另一种情况下,我们必须使用两个命令:
在这种情况下,“底部导航器”的“一个选项卡”将显示一些屏幕。 因此,在任何选项卡的导航与另一个选项卡的导航之间,您可以使用第二条命令。
答案 4 :(得分:2)
对于React导航2及更高版本,您可以使用
this.props.navigation.dispatch(NavigationActions.back())
也不要忘记在每个堆栈导航器中提及
initialRouteName: 'Posts'