Skip to main content

Navigation Container

The global React Navigation <NavigationContainer /> is completely managed by Expo Router. Expo Router provides systems for achieving the same functionality as the NavigationContainer without needing to use it directly.

ref

The NavigationContainer ref should not be accessed directly. Use the following methods instead.

Methods on the ref

resetRoot​

Navigate to the initial route of the application. For example, if your app starts at / (recommended), then you can replace the current route with / using this method.

import { useRouter } from "expo-router";

function Example() {
const router = useRouter();

return (
<Text
onPress={() => {
// Go to the initial route of the application.
router.replace("/");
}}
>
Reset App
</Text>
);
}

getRootState

Use useRootNavigationState().

getCurrentRoute

Unlike React Navigation, Expo Router can reliably represent any route with a string. Use the usePathname() or useSegments() hooks to identify the current route.

getCurrentOptions

Use the useLocalSearchParams() hook to get the current route's query parameters.

addListener

The following events can be migrated:

state

Use the usePathname() or useSegments() hooks to identify the current route. Use in conjunction with useEffect(() => {}, [...]) to observe changes.

options

Use the useLocalSearchParams() hook to get the current route's query parameters. Use in conjunction with useEffect(() => {}, [...]) to observe changes.

props

Migrate the following <NavigationContainer /> props:

initialState

In Expo Router, you can rehydrate your application state from a route string (e.g. /user/evanbacon). Use redirects to handle initial states. See shared routes for advanced redirects.

Avoid using this pattern in favor of deep linking (e.g. user opens your app to /profile rather than from the home screen) as it is most analogous to the web. If an app crashes due to a particular screen, it's best to avoid automatically navigating back to that exact screen when the app starts as it may require reinstalling the app to fix.

onStateChange

Use the usePathname(), useSegments(), and useGlobalSearchParams() hooks to identify the current route state. Use in conjunction with useEffect(() => {}, [...]) to observe changes.

onReady

In React Navigation, onReady is most often used to determine when the splash screen should hide or when to track screens using analytics. Expo Router has special handling for both these use cases. Assume the navigation is always ready in for navigation events in Expo Router.

onUnhandledAction

Actions are always handled in Expo Router. Use dynamic routes and 404 screens in favor of onUnhandledAction.

linking

The linking prop is automatically constructed based on the files to the app/ directory.

fallback

The fallback prop is automatically handled by Expo Router. Learn more in the Splash Screen guide.

theme

Use the <ThemeProvider /> component instead. Learn more in the Themes guide.

children

The children prop is a automatically populated based on the files in the app/ directory, and the currently open URL.

independent

Expo Router does not support independent containers. This is because the router is responsible for managing the single <NavigationContainer />. Any additional containers will not be automatically managed by Expo Router.

documentTitle

This property is not yet supported in Expo Router. Set the web page title using screen options.

ref

Use the useRootNavigation() hook instead.