---
title: useOutletContext
---
# `useOutletContext`
Type declaration
```tsx
declare function useOutletContext<
Context = unknown
>(): Context;
```
Often parent routes manage state or other values you want shared with child routes. You can create your own [context provider](https://react.dev/learn/passing-data-deeply-with-context) if you like, but this is such a common situation that it's built-into ``:
```tsx lines=[3]
function Parent() {
const [count, setCount] = React.useState(0);
return ;
}
```
```tsx lines=[4]
import { useOutletContext } from "react-router-dom";
function Child() {
const [count, setCount] = useOutletContext();
const increment = () => setCount((c) => c + 1);
return ;
}
```
If you're using TypeScript, we recommend the parent component provide a custom hook for accessing the context value. This makes it easier for consumers to get nice typings, control consumers, and know who's consuming the context value. Here's a more realistic example:
```tsx filename=src/routes/dashboard.tsx lines=[13,19]
import * as React from "react";
import type { User } from "./types";
import { Outlet, useOutletContext } from "react-router-dom";
type ContextType = { user: User | null };
export default function Dashboard() {
const [user, setUser] = React.useState(null);
return (
Dashboard
);
}
export function useUser() {
return useOutletContext();
}
```
```tsx filename=src/routes/dashboard/messages.tsx lines=[1,4]
import { useUser } from "../dashboard";
export default function DashboardMessages() {
const { user } = useUser();
return (