import { StreamChat } from 'stream-chat';
import { ChannelList, Chat, OverlayProvider } from 'stream-chat-react-native';
const client = StreamChat.getInstance('api_key');
const filters = { members: { $in: [ 'vishal', 'lucas', 'neil' ] } };
const sort = { last_updated: -1 };
const options = { limit: 20, messages_limit: 30 };
export const App = () =>
<OverlayProvider>
<Chat client={client}>
<ChannelList
filters={filters}
sort={sort}
options={options}
onSelect={(channel) => /** navigate to channel screen */ }
/>
</Chat>
</OverlayProvider>;ChannelList
The ChannelList displays a list of channels using React Native’s FlatList component.
ChannelList internally fetches a list of channels using the client’s query channels function; to which you can pass the filters, sort and options parameters via props on ChannelList.
When a user presses on a channel in the list you can provide navigation logic via the onSelect prop to navigate to the selected channel.
Basic Usage
ChannelList should be rendered inside of the OverlayProvider and Chat so it is provided the appropriate contexts to function internally.
Context Providers
ChannelList contains the provider for the ChannelsContext.
This can be accessed using the corresponding hook.
| Context | Hook |
|---|---|
ChannelsContext | useChannelsContext |
UI Customizations
The ChannelList is highly customizable.
The UI can be tailored to your design by replacing any number of components with custom components.
Customizing the title can be done easily by providing a custom component to the appropriate prop.
const CustomPreviewTitle = ({ channel }) => (
<Text>
{channel.data.customProperty} - {channel.data.name}
</Text>
);
<ChannelList PreviewTitle={CustomPreviewTitle} />;

Props
filters
Filter object passed internally to the client query function as a parameter. You can filter a query on built-in and custom fields on a Channel.
Example
Filter to query channels which users vishal or jaap are members of.
const filter = {
type: "messaging",
members: {
$in: ["vishal", "jaap"],
},
};For optimal performance you should pass a filter object with a static reference.
You can use a filter object that is not created inline; or memoize an inline filter object before passing it to the ChannelList to achieve this.
| Type |
|---|
| object |
sort
Sort object passed internally to the client query function as a parameter. You can sort a query on built-in and custom fields on a Channel.
Example
const sort = { last_updated: -1 };For optimal performance you should pass a sort object with a static reference.
You can use a sort object that is not created inline; or memoize an inline sort object before passing it to the ChannelList to achieve this.
| Type |
|---|
| object |
options
Options object passed internally to the client query function as a parameter.
Example
const options = { message_limit: 100 };| Type |
|---|
| object |
onSelect
Function called when a user presses an item in the ChannelList.
The function is called with the Channel instance corresponding to the list item as the only parameter.
This callback is often used for navigating to a channel screen.
Example
onSelect={(channel) => { /** navigation logic */ }}A Channel instance is not serializable and will therefore raise warnings if passed as a parameter through navigation to another screen.
| Type |
|---|
| function |
| Parameter | Description |
|---|---|
| channel | Channel instance |
additionalFlatListProps
Additional props provided to the underlying FlatList.
Example
const flatListProps = { bounces: true };
<ChannelList additionalFlatListProps={flatListProps} />;Don’t use additionalFlatListProps to access the FlatList ref, use setFlatListRef instead.
| Type |
|---|
| object |
loadMoreThreshold
Sets the onEndReachedThreshold of the underlying FlatList.
| Type | Default |
|---|---|
| number | 2 |
lockChannelOrder
Locks the order of the channels in the list so they will not dynamically reorder by most recent message when a new message is received.
| Type | Default |
|---|---|
| boolean | false |
maxUnreadCount
Max number to display within unread notification badge. The value cannot be higher than 255, which is the limit on backend side.
| Type | Default |
|---|---|
| number | 255 |
numberOfSkeletons
The number of Skeleton items to display in the LoadingIndicator.
| Type | Default |
|---|---|
| number | 6 |
onAddedToChannel
Override for Event Listener behavior when the user is added to a channel. The default behavior adds the channel to the list.
| Type |
|---|
| function |
| Parameter | Description |
|---|---|
| setChannels | Setter function for the internal channels state |
| event | Event object corresponding to notification.added_to_channel |
onChannelDeleted
Override for Event Listener behavior when a channel is deleted. The default behavior removes the channel from the list.
| Type |
|---|
| function |
| Parameter | Description |
|---|---|
| setChannels | Setter function for the internal channels state |
| event | Event object corresponding to channel.deleted |
onChannelHidden
Override for Event Listener behavior when a channel is hidden. The default behavior removes the channel from the list.
| Type |
|---|
| function |
| Parameter | Description |
|---|---|
| setChannels | Setter function for the internal channels state |
| event | Event object corresponding to channel.hidden |
onChannelVisible
Override for Event Listener behavior when a channel is made visible. The default behavior adds the channel to the list.
| Type |
|---|
| function |
| Parameter | Description |
|---|---|
| setChannels | Setter function for the internal channels state |
| event | Event object corresponding to channel.visible |
onChannelTruncated
Override for Event Listener behavior when a channel is truncated. The default behavior reloads the list.
| Type |
|---|
| function |
| Parameter | Description |
|---|---|
| setChannels | Setter function for the internal channels state |
| event | Event object corresponding to channel.truncated |
onChannelUpdated
Override for Event Listener behavior when a channel is updated.
The default behavior updates the data on a channel with that from the event.
| Type |
|---|
| function |
| Parameter | Description |
|---|---|
| setChannels | Setter function for the internal channels state |
| event | Event object corresponding to channel.updated |
onMessageNew
Override for Event Listener behavior when a message is received on a channel that is not being watched. The default behavior adds the channel to the list.
| Type |
|---|
| function |
| Parameter | Description |
|---|---|
| setChannels | Setter function for the internal channels state |
| event | Event object corresponding to notification.message_new |
onRemovedFromChannel
Override for Event Listener behavior when the user is removed from a channel. The default behavior removes the channel from the list.
| Type |
|---|
| function |
| Parameter | Description |
|---|---|
| setChannels | Setter function for the internal channels state |
| event | Event object corresponding to notification.removed_from_channel |
setFlatListRef
Callback function to access the underlying FlatList ref.
Example
const flatListRef = useRef();
<ChannelList setFlatListRef={(ref) => (flatListRef.current = ref)} />;| Type |
|---|
| function |
| Parameter | Description |
|---|---|
| ref | FlatList ref |
EmptyStateIndicator
Rendered when the channel list is empty and not loading via the ListEmptyComponent prop on the FlatList.
| Type | Default |
|---|---|
| component | EmptyStateIndicator |
FooterLoadingIndicator
Rendered when loadingNextPage from ChannelsContext is true via the ListFooterComponent prop on the FlatList.
| Type | Default |
|---|---|
| component | ChannelListFooterLoadingIndicator |
HeaderErrorIndicator
Rendered when error from ChannelsContext is true.
| Type | Default |
|---|---|
| component | ChannelListHeaderErrorIndicator |
HeaderNetworkDownIndicator
Rendered when isOnline from ChatContext is false.
| Type | Default |
|---|---|
| component | ChannelListHeaderNetworkDownIndicator |
List
Component to render the list of channels.
| Type | Default |
|---|---|
| component | ChannelListMessenger |
ListHeaderComponent
Rendered when provided if the channel list is not empty via the ListHeaderComponent prop on the FlatList.
| Type |
|---|
| component |
LoadingErrorIndicator
Rendered when error from ChannelsContext is true, and the channel list is empty and not loading.
| Type | Default |
|---|---|
| component | LoadingErrorIndicator |
LoadingIndicator
Rendered when the channel list is empty and loading via the ListEmptyComponent prop on the FlatList.
| Type | Default |
|---|---|
| component | ChannelListLoadingIndicator |
Preview
List item rendered by the underlying FlatList.
| Type | Default |
|---|---|
| component | ChannelPreviewMessenger |
PreviewAvatar
Avatar component rendered within Preview.
| Type | Default |
|---|---|
| component | ChannelAvatar |
PreviewMessage
Message component rendered within Preview.
| Type | Default |
|---|---|
| component | ChannelPreviewMessage |
PreviewMutedStatus
Channel muted status component rendered within Preview.
| Type | Default |
|---|---|
| component | ChannelPreviewMutedStatus |
PreviewStatus
Status component rendered within Preview.
| Type | Default |
|---|---|
| component | ChannelPreviewStatus |
PreviewTitle
Title component rendered within Preview.
| Type | Default |
|---|---|
| component | ChannelPreviewTitle |
PreviewUnreadCount
Unread count component rendered within Preview.
| Type | Default |
|---|---|
| component | ChannelPreviewUnreadCount |
Skeleton
Row item rendered in the LoadingIndicator.
| Type | Default |
|---|---|
| component | Skeleton |
- Basic Usage
- Context Providers
- UI Customizations
- Props
- filters
- sort
- options
- onSelect
- additionalFlatListProps
- loadMoreThreshold
- lockChannelOrder
- maxUnreadCount
- numberOfSkeletons
- onAddedToChannel
- onChannelDeleted
- onChannelHidden
- onChannelVisible
- onChannelTruncated
- onChannelUpdated
- onMessageNew
- onRemovedFromChannel
- setFlatListRef
- EmptyStateIndicator
- FooterLoadingIndicator
- HeaderErrorIndicator
- HeaderNetworkDownIndicator
- List
- ListHeaderComponent
- LoadingErrorIndicator
- LoadingIndicator
- Preview
- PreviewAvatar
- PreviewMessage
- PreviewMutedStatus
- PreviewStatus
- PreviewTitle
- PreviewUnreadCount
- Skeleton