React native 我可以提取react导航的所有路线键吗?
我正在尝试为所有屏幕制作一个关键地图。 为此,我需要从React native 我可以提取react导航的所有路线键吗?,react-native,react-navigation,react-navigation-v5,React Native,React Navigation,React Navigation V5,我正在尝试为所有屏幕制作一个关键地图。 为此,我需要从react-navigation的导航容器中提取所有键 比如说, const result = { MainScreen: 'Main-p-u9s_rA3z5HCT-KHyDua', IndexScreen: 'Index-97mYyg2-P5Kb_wGY4E1ke', <RouteName>: <RouteKey> ... } const结果={ 主屏幕:“Main-p-u9s_rA3z5H
react-navigation
的导航容器中提取所有键
比如说,
const result = {
MainScreen: 'Main-p-u9s_rA3z5HCT-KHyDua',
IndexScreen: 'Index-97mYyg2-P5Kb_wGY4E1ke',
<RouteName>: <RouteKey>
...
}
const结果={
主屏幕:“Main-p-u9s_rA3z5HCT-KHyDua”,
索引屏幕:“Index-97mYyg2-P5Kb_wGY4E1ke”,
:
...
}
有什么解决办法吗?您可以使用
getRootState方法返回一个导航状态对象,该对象包含导航树中所有导航器的导航状态
export const navigationRef=React.createRef();
常量应用=()=>{
useffect(()=>{
const navigationState=navigationRef.current?.getRootState();
const result={};
navigationState.routes.forEach(路由=>{
结果[route.name]=route.key;
});
控制台日志(结果);
},[navigationRef]);
返回(
);
};
上面代码中的console.log(result)
返回如下内容:
{“屏幕1”:“屏幕1-AVVWEcCJjDeVeO3fu4tgb”,“屏幕2”:“屏幕2-nXoQ6xsdjKxoB4hbeXNou”,“屏幕3”:“屏幕3-FuFi77tfvex2QXZfin86s”}
使用getRootState
时请记住:
…如果当前没有呈现导航器,则返回的状态对象将是未定义的
另请查看。如果有一个屏幕尚未渲染,这意味着它可能不在rootState上?是的,如果导航器尚未渲染,它将不会显示在navigation state对象中。这也适用于嵌套导航器。如果您有嵌套的导航器,您可能还需要更多的循环来获取
结果
对象中的这些路由,或者您可以在导航器呈现时获取导航器的导航状态,而无需使用getRootState
。不管怎样,我认为不可能一次得到所有的东西。
export const navigationRef = React.createRef();
const App = () => {
useEffect(() => {
const navigationState = navigationRef.current?.getRootState();
const result = {};
navigationState.routes.forEach(route => {
result[route.name] = route.key;
});
console.log(result);
}, [navigationRef]);
return (
<NavigationContainer ref={navigationRef}>
<Tab.Navigator>
<Tab.Screen name="Screen1" component={Screen1} />
<Tab.Screen name="Screen2" component={Screen2} />
<Tab.Screen name="Screen3" component={Screen3} />
</Tab.Navigator>
</NavigationContainer>
);
};