首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >响应导航回()和goBack()不工作

响应导航回()和goBack()不工作
EN

Stack Overflow用户
提问于 2017-08-03 16:02:34
回答 6查看 126.6K关注 0票数 47

我正试着回去看两个屏幕。目标是从EditPageCover。这是我的导航堆栈:

Main -> Cover -> EditCover -> EditPage

我读了这些文档,它说要提供您想要返回的屏幕的一个键,这是我的代码:

代码语言:javascript
复制
this.props.navigation.dispatch(NavigationActions.back({key: 'EditCover'}));

我也试过(运气不好):

代码语言:javascript
复制
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'});

有趣的是,我没有犯任何错误。当代码被调用时什么都不会发生..。

如果我只想返回一个屏幕,这段代码可以正常工作:

代码语言:javascript
复制
this.props.navigation.goBack(null);

万一有人在找到解决方案之前发现了这件事。这个黑客现在起作用了:

代码语言:javascript
复制
this.props.navigation.goBack(null);
this.props.navigation.goBack(null);
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-08-04 03:09:36

key属性goBack()是一个动态创建的字符串,由react-navigation在导航到新路由时创建。

例如:

它存储在this.props.navigation.state.key中。

因此,如果您想从EditPage转到Cover,您需要做的就是将EditCover的键向下传递到EditPage,然后用密钥调用goBack()

为什么不是Cover的密钥,而是EditCover

因为react导航只提供方法goBack(key),它是从键返回的go,而不是go回到key。

还可以提供一个密钥,该密钥指定要返回的路由。默认情况下,goBack将关闭从其调用的路由。如果目标是返回任何地方,而不指定关闭的是什么,则调用.goBack(null);

EditCover.js

代码语言:javascript
复制
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>
    );
}

EditPage.js

代码语言:javascript
复制
render() {
    const { state, goBack } = this.props.navigation;    
    const params = state.params || {};

    return (
        <View>
            <Button title="Back to Cover" onPress={ () => {
                /* go back from *EditCover* to *Cover* */
                goBack(params.go_back_key);
            }} />
        </View>
    );
}
票数 60
EN

Stack Overflow用户

发布于 2018-09-11 01:11:13

正确的方法是使用StackNavigation:

代码语言:javascript
复制
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) -> Cover (goBack) -> Main

您必须在组件中像这样调用goBack(null)

代码语言:javascript
复制
this.props.navigation.goBack(null);

这是正确的方法。

票数 38
EN

Stack Overflow用户

发布于 2019-08-17 19:13:12

通常,我们可以使用以下两个命令

  1. this.props.navigation.goBack()
  2. this.props.navigation.dispatch(NavigationActions.back())

在另一种情况下,我们必须使用两个命令:

  • 只有一个堆栈导航器的项目中有用的第一个命令
  • 在底部导航器中有用的第二命令。

在这种情况下,一个底部导航标签将有一些屏幕。因此,在任何选项卡的导航和另一个Tab的导航之间,可以使用第二个命令。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45489343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档