# livekit-react
**Repository Path**: anmslooo/livekit-react
## Basic Information
- **Project Name**: livekit-react
- **Description**: livekit-react
- **Primary Language**: JavaScript
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 1
- **Created**: 2023-11-02
- **Last Updated**: 2024-07-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# LiveKit React Component Library
This package provides React components that makes it easier to use LiveKit in a React app.
## Install
```bash
npm install --save livekit-react
```
## Demo
https://example.livekit.io.
Source available in [example](example/)
## Usage
### Video room with built-in UI
Without customization, the component would use a default skin as seen in the demo above.
```tsx
import { LiveKitRoom } from 'livekit-react'
// CSS should be explicitly imported if using the default UI
import 'livekit-react/dist/index.css'
// used by the default ParticipantView to maintain video aspect ratio.
// this CSS must be imported globally
// if you are using a custom Participant renderer, this import isn't necessary.
import "react-aspect-ratio/aspect-ratio.css";
export const RoomPage = () => {
const url = 'wss://your_host'
const token = 'your_token'
return (
onConnected(room)}/>
)
}
async function onConnected(room) {
await room.localParticipant.setCameraEnabled(true)
await room.localParticipant.setMicrophoneEnabled(true)
}
```
### Customize rendering
To provide your own rendering, override one or more of `stageRenderer`, `participantRenderer`, and `controlRenderer`. It's possible customize a single renderer and use defaults for the others.
```tsx
export const RoomPage = () => {
const url = 'wss://your_host'
const token = 'your_token'
return (
{ return }}
// participantRenderer renders a single participant
participantRenderer={(props: ParticipantProps) => { return }}
// controlRenderer renders the control bar
controlRenderer={(props: ControlsProps) => { return }}
/>
)
}
```
### Using custom hooks
The provided components make use of two hooks: `useRoom` and `useParticipant`, they will help you manage internal LiveKit callbacks and map them into state variables that are ready-to-use from React components.
Using the `connect` function returned by useRoom will ensure that callbacks are registered automatically and the other state variables are updated when changes take place in the room.
```tsx
import { useRoom, useParticipant } from 'livekit-react'
export const MyComponent = () => {
const { connect, isConnecting, room, error, participants, audioTracks } = useRoom();
...
}
export const ParticipantRenderer = ({ participant }) => {
const { isSpeaking, subscribedTracks } = useParticipant(participant)
...
}
```
### Rendering video and audio
When building your custom UI, it's helpful to use track renderers that are provided in this library. `AudioRenderer` and `VideoRenderer` would render an audio and video track, respectively.