# Hooks

Hooks available from `neutron`.

## `useLoaderData`

Returns the data returned from the route's `loader`.

```tsx
const data = useLoaderData<typeof loader>();
```

## `useActionData`

Returns the data returned from the route's `action`. Undefined if the action hasn't run yet.

```tsx
const data = useActionData<typeof action>();
```

## `useNavigation`

Returns the current navigation state.

```tsx
const navigation = useNavigation();
// navigation.state: "idle" | "loading" | "submitting"
// navigation.formData: FormData (during submission)
```

## `useParams`

Returns an object of dynamic route parameters.

```tsx
const params = useParams();
// params.id
```

## `useRevalidator`

Allows manual revalidation of loaders.

```tsx
const { revalidate, state } = useRevalidator();
```

## Handling errors

There is no `useRouteError` hook. Errors are handled by exporting an `ErrorBoundary` component, which receives the error as a prop:

```tsx
import type { ErrorBoundaryProps } from "@neutron-build/core";

export function ErrorBoundary({ error, reset }: ErrorBoundaryProps) {
  return <p>{error.message}</p>;
}
```

See [Error Boundaries](/docs/routing/error-boundaries) for details.

> Additional client hooks exported from `@neutron-build/core/client` — `useNavigate`, `useSubmit`, `useSearchParams`, `useBlocker`, `useMatches` — follow the same signatures as their React Router equivalents.
