--- 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 (

Messages

Hello, {user.name}!

); } ```