导航堆栈为空时如何导航到特定屏幕?

时间:2019-03-02 13:21:32

标签: react-native react-navigation

我该怎么做:

if navigation stack is not empty
    this.props.navigation.goBack()
else
    this.props.navigation.navigate('CustomScreen')

2 个答案:

答案 0 :(得分:1)

一种解决方法是从上一屏幕发送参数,并在当前屏幕中检查该参数是否存在

Screen1:

this.props.navigation.navigate('Screen2', {prevScreen: 'Screen1'});

Screen2:

if(this.props.navigation.getParam('prevScreen', null))
    this.props.navigation.goBack();
else
    this.props.navigation.navigate('CustomScreen');

答案 1 :(得分:1)

this.props.navigation中有一个名为dangerouslyGetParent的函数。您可以在文档here中看到它。

它在文档中声明以下内容:

  

另一个很好的用例是找到活动目录的索引   父母的路线列表中的路线。所以在堆叠的情况下   在索引0处,那么您可能不希望渲染后退按钮,但是如果   如果您在列表中的其他位置,则将显示“后退”按钮。

因此我们可以使用以下内容获取路线的索引

this.props.navigation.dangerouslyGetParent().state.index

因此,不必传递参数,您可以检查堆栈中的位置,然后决定要做什么。

// get the index of the route
let index = this.props.navigation.dangerouslyGetParent().state.index;
// handle the index we get
if (index > 0) {
    this.props.navigation.goBack();
} else {
    this.props.navigation.navigate('CustomScreen')
}