# @motiadev/stream-client-react Motia Stream Client React Package – Responsible for managing streams of data in React applications. For more information about Motia Streams, please refer to the [Motia Streams documentation](https://motia.dev/docs). ## Overview `@motiadev/stream-client-react` provides a set of React utilities and hooks for integrating Motia's real-time streaming capabilities into your React applications. It enables you to subscribe to individual stream items, groups, and handle real-time events with idiomatic React patterns. --- ## Installation ```bash npm install @motiadev/stream-client-react ``` ## Exports - **Stream, StreamItemSubscription, StreamGroupSubscription** (Re-exported from `@motiadev/stream-client-browser`) - **MotiaStreamProvider** React provider for initializing and supplying the stream context. - **useMotiaStream** Hook to access the current stream instance from context. - **useStreamItem** Hook to subscribe to a single stream item. - **useStreamGroup** Hook to subscribe to a group of stream items. - **useStreamEventHandler** Hook to attach event listeners to stream subscriptions. ## Usage ### 1. MotiaStreamProvider Wrap your application (or a subtree) with `MotiaStreamProvider` to initialize the stream and provide it via context. ```tsx import { MotiaStreamProvider } from '@motiadev/stream-client-react' const App = () => { return ( ) } ``` **Props:** - `address` (string): The WebSocket address of your Motia stream server. --- ### 2. useMotiaStream Access the current stream instance anywhere within the provider. ```tsx import { useMotiaStream } from '@motiadev/stream-client-react' const { stream } = useMotiaStream() ``` --- ### 3. useStreamItem Subscribe to a single item in a stream and receive real-time updates. ```tsx import { useStreamItem } from '@motiadev/stream-client-react' const { data, event } = useStreamItem<{ name: string }>({ /** * The stream name from motia Server */ streamName: 'users', /** * The id of the item to subscribe to */ id: 'user-123', }) ``` - `data`: The current value of the item (typed). - `event`: The subscription object to subscribe to custom events. Check `useStreamEventHandler` for more information. --- ### 4. useStreamGroup Subscribe to a group of items in a stream. ```tsx import { useStreamGroup } from '@motiadev/stream-client-react' const { data, event } = useStreamGroup<{ name: string }>({ /** * The stream name from motia Server */ streamName: 'users', /** * The group id to subscribe to */ groupId: 'admins', }) ``` - `data`: Array of current group items. - `event`: The group subscription object. --- ### 5. useStreamEventHandler Attach custom event listeners to a stream subscription. ```tsx import { useStreamEventHandler } from '@motiadev/stream-client-react' useStreamEventHandler( { event, // from useStreamItem or useStreamGroup type: 'custom-event', listener: (eventData) => { // handle event }, }, [ /* dependencies */ ], ) ``` --- ## API Reference ### MotiaStreamProvider - **Props:** - `address: string` – WebSocket address for the stream server. - `children: React.ReactNode` ### useMotiaStream - Returns `{ stream }` from context. ### useStreamItem - **Args:** `{ streamName: string, id: string }` - **Returns:** `{ data: TData | null, event: StreamSubscription | null }` ### useStreamGroup - **Args:** `{ streamName: string, groupId: string }` - **Returns:** `{ data: TData[], event: StreamSubscription | null }` ### useStreamEventHandler - **Args:** - `{ event, type, listener }` - `dependencies` (array): React dependency list --- ## Example ```tsx import { MotiaStreamProvider, useStreamItem, useStreamEventHandler } from '@motiadev/stream-client-react' function UserComponent({ userId }) { const { data, event } = useStreamItem<{ name: string }>({ streamName: 'users', id: userId, }) useStreamEventHandler( { event, type: 'user-updated', listener: (e) => alert('User updated!'), }, [event], ) if (!data) return
Loading...
return
{data.name}
} export default function App() { return ( ) } ``` --- ## Notes - All hooks must be used within a `MotiaStreamProvider`. - The library is designed to work seamlessly with Motia's event-driven architecture. - For advanced stream management, refer to the [@motiadev/stream-client-browser](https://www.npmjs.com/package/@motiadev/stream-client-browser) documentation. ## License MIT