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>
  );
};