我怎么能这样做:
if navigation stack is not empty this.props.navigation.goBack() else this.props.navigation.navigate('CustomScreen')
字符串
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');
型
pkmbmrz72#
在this.props.navigation中有一个名为dangerouslyGetParent的函数。你可以在这里的文档中看到它。它在文档中说明了以下内容:另一个很好的例子是在父路由列表中找到活动路由的索引。所以在堆栈的情况下,如果你在索引0处,那么你可能不想渲染后退按钮,但是如果你在列表中的其他地方,那么你会渲染后退按钮。所以我们可以使用下面的方法来得到路由的索引
this.props.navigation
dangerouslyGetParent
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') }
cnjp1d6j3#
现在最好的解决方案是简单地检查navigation.canGoBack()。它给你一个布尔值来检查返回是否安全。ref:https://reactnavigation.org/docs/navigation-prop/#cangoback
3条答案
按热度按时间z0qdvdin1#
解决方法是从上一个屏幕发送参数,并在当前屏幕中检查该参数是否存在
屏幕1:
字符串
屏幕2:
型
pkmbmrz72#
在
this.props.navigation
中有一个名为dangerouslyGetParent
的函数。你可以在这里的文档中看到它。它在文档中说明了以下内容:
另一个很好的例子是在父路由列表中找到活动路由的索引。所以在堆栈的情况下,如果你在索引0处,那么你可能不想渲染后退按钮,但是如果你在列表中的其他地方,那么你会渲染后退按钮。
所以我们可以使用下面的方法来得到路由的索引
字符串
因此,无需传递参数,您就可以检查自己在堆栈中的位置,然后决定要做什么。
型
cnjp1d6j3#
现在最好的解决方案是简单地检查navigation.canGoBack()。它给你一个布尔值来检查返回是否安全。ref:https://reactnavigation.org/docs/navigation-prop/#cangoback