У меня есть пользовательский хук, который получает текущий маршрут из React Navigation:
import { getRootState } from "application/components/provider/root-navigation";
import React from "react";
const useCurrentPage = () => {
const state = getRootState();
if (!state) {
return null;
}
return state.routes[state.index].name;
};
export default useCurrentPage;
Это работает, кроме значения по умолчанию root. Поэтому, когда маршрут home
getRootState
равен undefined
, что означает, что хук возвращается null
<Stack.Navigator headerMode="none" initialRouteName="home">
<Stack.Screen name="home" component={Home} />
<Stack.Screen name="contact" component={Contact} />
</Stack.Navigator>
Я могу взломать решение с этим, но зачем это нужно ?:
import { getRootState } from "application/components/provider/root-navigation";
import React from "react";
const useCurrentPage = () => {
const state = getRootState();
if (!state) {
return "home"
}
return state.routes[state.index].name;
};
export default useCurrentPage;
Здесь определено getRootState
:
export const navigationRef = React.createRef();
export function getRootState() {
return navigationRef.current?.getRootState();
}
И мой NavigationContainer:
const NavigationProvider = ({ children }) => {
return (
<NavigationContainer ref={navigationRef}>{children}</NavigationContainer>
);
};