我试图得到以前的路线名称到我的当前屏幕。因为基于以前的屏幕名称,我必须显示/隐藏当前屏幕中的一些对象。
为了获取以前的屏幕名称,我尝试了以下操作
componentDidMount() {
const { navigation } = this.props;
if (navigation.state.params && navigation.state.params.previous_screen) {
console.log('navigation.state.params.previous_screen', navigation.state.params.previous_screen);
}
}
但是,它在控制台日志中获取undefined
。
有什么建议吗?
8条答案
按热度按时间juud5qan1#
对于Stack Navigators,我能够在react-navigation v6中动态获取以前的路由名称:
注意:这对于动态地将参数传递回前一个屏幕非常有用。但是要注意嵌套的路由,语法略有不同。
vmpqdwk32#
您需要使用
NavigationActions
在
onPress
中调用上述函数在另一个屏幕上
Working demo
功能版本
并访问参数,如
piv4azn73#
我得到了正确的方式找到以前的路线(屏幕)名称从当前屏幕
您将从导航堆栈中获得屏幕的列表(数组)。
输出在这里
谢谢大家-K 00 L;)
zwghvu4y4#
我使用了下面的方法。这可能不是最好的方法,但它确实有效。
332nm8kg5#
x8diyxa76#
使用
react-navigation
v5,你可以使用路由和索引递归导航状态来找到当前路由。一旦你找到了当前路由,一个没有任何子路由的对象,你可以从索引中减去1来获得前一个路由。实现这一点的代码类似于
这种策略有一些限制-由于堆栈的限制,它会在返回时返回当前路线。它也会在切换堆栈时返回当前屏幕。
cyvaqqii7#
在
app.js | index.js
中定义一些函数。表示初始屏幕并将此功能传递到导航屏幕
然后在屏幕中使用
navigation.goBack()
之前运行goBackScreen
Note
:现在你可以在activeScreen中获得以前的屏幕名称。这只是一个可能性的例子。你可以尝试自己的想法或者可以在params中传递上一个屏幕
然后下一个屏幕你可以得到它的
console.log(this.props.route.params)
8aqjt8rx8#
使用navigation ref,您可以访问根状态。
此块帮助检查目标路由是否位于嵌套导航/路由
(currentRoute?.state?.index > -1 && currentRoute?.state?.routes) ? currentRoute?.state?.routes?.[currentRoute?.state?.index]
中