---
title: "useComponent"
description: "Register a React component as a frontend tool renderer in chat"
---
## Overview
`useComponent` is a convenience hook built on top of `useFrontendTool`.
It registers a tool and renders a React Native component in chat using the tool call parameters.
Re-exported from `@copilotkit/react-core/v2`. It is identical to the [React (V2) `useComponent`](/reference/v2/hooks/useComponent); only the import path differs.
Use this when you want a visual component renderer without writing a full frontend tool config manually. The component you pass to `render` returns React Native elements that CopilotKit surfaces in the chat. See [`useRenderTool`](/reference/react-native/hooks/useRenderTool) for the underlying React Native render mechanism.
## Signature
```tsx
import { z } from "zod";
import type { ComponentType } from "react";
import { useComponent } from "@copilotkit/react-native";
function useComponent(
config: {
name: string;
description?: string;
parameters?: TSchema;
// When parameters is provided, props are inferred via z.infer.
// When omitted, render accepts any props.
render: ComponentType>;
agentId?: string;
},
deps?: ReadonlyArray,
): void;
```
## Parameters
- `config.name`: tool name used by the agent to invoke this component tool.
- `config.description`: optional extra description for model guidance.
- `config.parameters`: optional Zod schema for typed/validated parameters. When provided, `render` props are inferred from the schema.
- `config.render`: React Native component rendered with parsed tool parameters. Accepts any props when `parameters` is omitted.
- `config.agentId`: optional agent scope for the registration.
- `deps`: optional dependency array for refreshing registration.
## Behavior
- Prepends a default instruction to the description: _"Use this tool to display the \"<name>\" component in the chat..."_.
- Calls `useFrontendTool` internally with a render function that spreads the tool parameters as component props.
- Inherits `useFrontendTool` lifecycle behavior: duplicate-name override warning, tool removal on unmount, and renderer retention for chat history.
- Tracks updates by `config.name` plus `deps` (include any changing captured values in `deps`).
## Usage
```tsx
import { Text, View } from "react-native";
import { useComponent } from "@copilotkit/react-native";
import { z } from "zod";
const weatherCardSchema = z.object({
city: z.string().describe("City name"),
unit: z.enum(["c", "f"]).default("c"),
});
type WeatherCardProps = z.infer;
function WeatherCard({ city, unit }: WeatherCardProps) {
return (
Weather request
{city} ({unit.toUpperCase()})
);
}
function App() {
useComponent(
{
name: "showWeatherCard",
description: "Render a weather card in chat for the requested city.",
parameters: weatherCardSchema,
render: WeatherCard,
},
[],
);
return null;
}
```
## Related
- [`useFrontendTool`](/reference/react-native/hooks/useFrontendTool)
- [`useRenderTool`](/reference/react-native/hooks/useRenderTool)
- [React (V2) reference](/reference/v2/hooks/useComponent)