Liveblocks uses the concept of rooms, separate virtual spaces where people can collaborate. To create a realtime experience, multiple users must be connected to the same room.
RoomProvider
is the component we’ll be using to connect to a room, and it
requires an id
prop, which represents the unique name of the room. Switch to
App.tsx
and return a RoomProvider
component with the roomId
string.
/App.tsx
return ( <LiveblocksProvider publicApiKey={publicApiKey}> <RoomProvider id={roomId}> <Room /> </RoomProvider> </LiveblocksProvider>);
We’ll be building our custom realtime app inside Room.tsx
, so we’re passing
this component as a child.
We recommend using Suspense
when building with Liveblocks, as it makes it simpler to use our hooks. This
also makes it easy to display a loading screen around components by using
ClientSideSuspense
from the @liveblocks/react
package. To do this, pass
<Room>
as a child, and include a loading fallback
:
/App.tsx
return ( <LiveblocksProvider publicApiKey={publicApiKey}> <RoomProvider id={roomId}> <ClientSideSuspense fallback={<div>Loading…</div>}> <Room /> </ClientSideSuspense> </RoomProvider> </LiveblocksProvider>);
You can place this component anywhere inside your app, for example around an avatar stack—it doesn’t have to sit at the top-level. Add the code and click refresh in the preview window to see a brief loading message.