React Native 当导航堆栈为空时,如何导航到特定屏幕?

h9a6wy2h  于 2023-11-21  发布在  React
关注(0)|答案(3)|浏览(153)

我怎么能这样做:

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

字符串

z0qdvdin

z0qdvdin1#

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

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

字符串
屏幕2:

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

pkmbmrz7

pkmbmrz72#

this.props.navigation中有一个名为dangerouslyGetParent的函数。你可以在这里的文档中看到它。
它在文档中说明了以下内容:
另一个很好的例子是在父路由列表中找到活动路由的索引。所以在堆栈的情况下,如果你在索引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')
}

cnjp1d6j

cnjp1d6j3#

现在最好的解决方案是简单地检查navigation.canGoBack()。它给你一个布尔值来检查返回是否安全。ref:https://reactnavigation.org/docs/navigation-prop/#cangoback

相关问题