【发布时间】:2020-02-06 12:43:38
【问题描述】:
我正在使用这个https://reactnavigation.org/docs/en/navigating-without-navigation-prop.html 从任何来源访问我的导航,我的文件如下所示:
import { createRef } from 'react';
export const navigationRef = createRef();
export function navigate(name, params) {
return navigationRef.current?.navigate(name, params);
}
export function goBack() {
return navigationRef.current?.goBack();
}
export function getRootState() {
return navigationRef.current?.getRootState();
}
这非常适合我的@navigation/drawer,它在我的堆栈导航之外。
只有一个问题是最后一个方法没有同步,我想在我的项目菜单上有一个活动状态,即当前路线。
react navigation 5 怎么可能?
【问题讨论】:
-
试试这个:
navigation.state.routes[navigation.state.index].routeName...这取决于您的导航结构...所以尝试 console.lognavigation.state,你会得到你想要的... -
好吧,我不能。我没有使用 v4。在 v5 中,我必须使用
useNavigation()来访问导航,因为我在堆栈导航器之外(我在抽屉导航器的 DrawerContent 中,它包装了堆栈导航器),所以我无法访问navigation对象这边走。这就是我将其链接的原因:reactnavigation.org/docs/en/… -
如果你想在抽屉的 contentComponent 中访问
navigation对象:你可以试试这个:this.props.descriptors.YourStackIdentifer.navigation...我的意思是navigation对象在道具中,不需要使用useNavigation或类似的东西注入它... -
我使用
<DrawerNavigator drawerContent={DrawerContent}><Stack.Navigator><ScreenList /></Stack.Navigator></DrawerNavigator>,为了使用useNavigation,您必须在<Stack.Navigator />树中,但DrawerContent不是,所以不可能使用useNavigation。此外,navigation不会注入到 DrawerContent 中。 -
我和你有同样的问题,我试过
useNavigation()和useNavigationState()但总是没有最新状态。也许您可以尝试这种方式,我认为目前只有这种方式才能达到State Persistance。通过使用 AsyncStorage 获取最新状态或创建上下文提供程序以在更改更新上下文时存储状态。
标签: javascript reactjs react-native react-native-android react-native-web