Skip to content
Info:
This is documentation for Stream Chat React SDK v13, which is no longer actively maintained. For up-to-date documentation, see the latest version (v14).

ComponentContext

ComponentContext is provided by Channel and can be consumed by any Channel child. It contains UI component overrides for customization. To override UI under Channel, pass the overrides as Channel props so they’re injected into ComponentContext. Access it via useComponentContext.

Best Practices

  • Prefer WithComponents to scope overrides instead of global component props.
  • Keep overrides small and composable to reduce future upgrade work.
  • Reuse default components when only styles or minor behavior changes are needed.
  • Avoid wrapping every subtree; scope overrides only where they differ.
  • Document custom overrides to keep UI behavior predictable across teams.

Basic Usage

Pull values from ComponentContext with our custom hook:

const { Attachment, Avatar, Message } = useComponentContext();

WithComponents

WithComponents is an override helper built on ComponentContext. It replaces prop-based overrides, which are being deprecated.

Basic Usage of WithComponents

In this example, the top-level MessageInput uses the closest override (CustomMessageInputUi1). The Thread component uses its own MessageInput, and the closest override there is CustomMessageInputUi2. If you remove the WithComponents wrapper around Thread, its MessageInput falls back to CustomMessageInputUi1. With no WithComponents wrappers, defaults are used.

const CustomMessageInputUi1 = () => {
  /*...*/
};
const CustomMessageInputUi2 = () => {
  /*...*/
};

<Channel>
  <WithComponents overrides={{ Input: CustomMessageInputUi1 }}>
    <Window>
      <MessageList />
      <MessageInput focus />
    </Window>
    <WithComponents overrides={{ Input: CustomMessageInputUi2 }}>
      <Thread />
    </WithComponents>
  </WithComponents>
</Channel>;

You can also scope overrides like this: MessageInput inside Window uses CustomMessageInputUi2, ThreadList inside ChatView.Threads uses CustomThreadListItem, and both Thread components use CustomMessageInputUi1 for their internal MessageInput.

const CustomThreadListItem = () => {
  /*...*/
};

<Chat>
  <WithComponents
    overrides={{
      ThreadListItem: CustomThreadListItem,
      Input: CustomMessageInputUi1,
    }}
  >
    <ChatView>
      <ChatView.Selector />
      <ChatView.Channels>
        <ChannelList />
        <Channel>
          <WithComponents
            overrides={{
              Input: CustomMessageInputUi2,
            }}
          >
            <Window>
              {/*...*/}
              <MessageInput focus />
            </Window>
          </WithComponents>
          <Thread />
        </Channel>
      </ChatView.Channels>
      <ChatView.Threads>
        <ThreadList />
        <ChatView.ThreadAdapter>
          <Thread />
        </ChatView.ThreadAdapter>
      </ChatView.Threads>
    </ChatView>
  </WithComponents>
</Chat>;

Values

Attachment

Custom UI component to display attachment in an individual message.

Type Default
component Attachment

AttachmentPreviewList

Custom UI component to display a attachment previews in MessageInput.

Type Default
component AttachmentPreviewList

AttachmentSelector

Custom UI component to control adding attachments to MessageInput, defaults to and accepts same props as:

Type Default
component AttachmentSelector

AttachmentSelectorInitiationButtonContents

Custom UI component for contents of attachment selector initiation button.

Type
component

AudioRecorder

Custom UI component to display AudioRecorder in MessageInput.

Type Default
component AudioRecorder

AutocompleteSuggestionItem

Custom UI component to override the default suggestion Item component.

Type Default
component SuggestionListItem

AutocompleteSuggestionList

Custom UI component to override the default List component that displays suggestions.

Type Default
component SuggestionList

Avatar

Custom UI component to display a user's avatar.

Type Default
component Avatar

BaseImage

Custom UI component to display image resp. a fallback in case of load error, in <img/> element. The default resp. custom (from ComponentContext) BaseImage component is rendered by:

  • Image - single image attachment in message list
  • Gallery - group of image attachments in message list
  • AttachmentPreviewList - image uploads preview in message input (composer)

The BaseImage component accepts the same props as <img/> element.

The default BaseImage component tries to load and display an image and if the load fails, then an SVG image fallback is applied to the <img/> element as a CSS mask targeting attached str-chat__base-image--load-failed class.

Type Default
component BaseImage

CooldownTimer

Custom UI component to display the slow mode cooldown timer.

Type Default
component CooldownTimer

CustomMessageActionsList

Custom UI component to render set of buttons to be displayed in the MessageActionsBox.

Type Default
component CustomMessageActionsList

DateSeparator

Custom UI component for date separators.

Type Default
component DateSeparator

EditMessageInput

Custom UI component to override default edit message input.

Type Default
component EditMessageForm

EditMessageModal

Custom UI component to override default EditMessageModal component. It is useful when we want to override additionalMessageInputProps, e.g. number of rows in the textarea:

import {
  Channel,
  EditMessageModal,
  EditMessageModalProps,
} from "stream-chat-react";

const CustomEditMessageModal = (props: EditMessageModalProps) => (
  <EditMessageModal
    additionalMessageInputProps={{
      ...props.additionalMessageInputProps,
      maxRows: 10,
    }}
  />
);
const Component = ({ children }) => (
  <Channel EditMessageModal={CustomEditMessageModal}>{children}</Channel>
);
Type Default
component EditMessageModal

EmojiIcon

Custom UI component for emoji button in input.

Type Default
component EmojiIconSmall

EmptyStateIndicator

Custom UI component to be displayed when the MessageList is empty.

Type Default
component EmptyStateIndicator

FileUploadIcon (deprecated)

Custom UI component for file upload icon. The component is now deprecated. Use AttachmentSelectorInitiationButtonContents instead.

Type Default
component FileUploadIcon

GiphyPreviewMessage

Custom UI component to render a Giphy preview in the VirtualizedMessageList.

Type Default
component GiphyPreviewMessage

HeaderComponent

Custom UI component to render at the top of the MessageList.

Type Default
component none

Input

Custom UI component handling how the message input is rendered.

Type Default
component MessageInputFlat

LinkPreviewList

Custom component to render link previews in MessageInput.

Type Default
component MessageInputFlat

LoadingErrorIndicator

Custom UI component to be shown if the channel query fails.

Type Default
component LoadingErrorIndicator

LoadingIndicator

Custom UI component to render while the MessageList is loading new messages.

Type Default
component LoadingIndicator

Message

Custom UI component to display a message in the standard MessageList.

Type Default
component MessageSimple

MessageActions

Custom UI component for message actions popup, accepts no props, all the defaults are set within MessageActions (unstable).

Type Default
component MessageActions (unstable)

MessageBlocked

Custom UI component for a moderation-blocked message, defaults to and accepts same props as: MessageBlocked

Type Default
component MessageBlocked

MessageBouncePrompt

Custom UI component for the content of the modal dialog for messages that got bounced by the moderation rules.

Type Default
component MessageBouncePrompt

MessageDeleted

Custom UI component for a deleted message.

Type Default
component MessageDeleted

MessageIsThreadReplyInChannelButtonIndicator

Custom UI component to indicate a message is a thread reply sent to channel list as well.

MessageListNotifications

Custom UI component that displays message and connection status notifications in the MessageList.

Type Default
component DefaultMessageListNotifications

MessageNotification

Custom UI component to display a notification when scrolled up the list and new messages arrive.

Type Default
component MessageNotification

MessageOptions

Custom UI component for message options popup.

Type Default
component MessageOptions

MessageRepliesCountButton

Custom UI component to display message replies.

Type Default
component MessageRepliesCountButton

MessageStatus

Custom UI component to display message delivery status.

Type Default
component MessageStatus

MessageSystem

Custom UI component to display system messages.

Type Default
component EventComponent

MessageTimestamp

Custom UI component to display a timestamp on a message. This does not include a timestamp for edited messages.

Type Default
component MessageTimestamp

See also Timestamp.

Custom UI component for viewing content in a modal, defaults to and accepts the same props as Modal.

It is possible to override the default Modal component with GlobalModal to have the content displayed via React portal at the top of the Chat components tree:

import { GlobalModal } from "stream-chat-react";

const Component = () => <Channel Modal={GlobalModal}></Channel>;

Using the GlobalModal prevents UI glitches in some browsers (e.g. Safari cutting of the modal overlay to the dimensions of the message list).

Type Default
component Modal

ModalGallery

Custom UI component for viewing message's image attachments.

Type Default
component ModalGallery

PinIndicator

Custom UI component to override default pinned message indicator.

Type Default
component PinIndicator

PollActions

Custom UI component to override default poll actions rendering in a message.

Type Default
component PollActions

PollContent

Custom UI component to override default poll rendering in a message.

Type Default
component PollContent

PollCreationDialog

Custom UI component to override default poll creation dialog contents.

Type Default
component PollCreationDialog

PollHeader

Custom UI component to override default poll header in a message.

Type Default
component PollHeader

PollOptionSelector

Custom UI component to override default poll option selector.

Type Default
component PollOptionSelector

QuotedMessage

Custom UI component to override quoted message UI on a sent message.

Type Default
component QuotedMessage

QuotedMessagePreview

Custom UI component to override the message input's quoted message preview.

Type Default
component QuotedMessagePreview

QuotedPoll

Custom UI component to override the rendering of quoted poll.

Type Default
component QuotedPoll

ReactionSelector

Custom UI component to display the reaction selector.

Type Default
component ReactionSelector

ReactionsList

Custom UI component to display the list of reactions on a message.

Type Default
component ReactionsList

ReactionsListModal

Custom UI component to display the modal with detailed listing of reactions. The modal is rendered upon clicking on the ReactionsList.

Type Default
component ReactionsList

ReminderNotification

Custom UI component to display the message reminder information in the Message UI.

Type Default
component ReminderNotification

SendButton

Custom UI component for send button.

Type Default
component SendButton

SendToChannelCheckbox

Custom UI component allowing to send the composed thread reply to the channel's message list as well. Should be rendered only with thread message composer.

Type Default
component SendToChannelCheckbox

TextareaComposer

Custom UI component to handle message text input

Type Default
component TextareaComposer

ThreadHead

Custom UI component to be displayed at the beginning of a thread. By default, it is the thread parent message. It is composed of Message context provider component and ThreadStart component. The latter can be customized by passing custom component to Channel props. The ThreadHead component defaults to and accepts the same props as MessageSimple.

Type Default
component ThreadHead

ThreadHeader

Custom UI component to display the header of a Thread.

Type Default
component DefaultThreadHeader

ThreadInput

Custom UI component to replace the MessageInput of a Thread. The component uses MessageInputFlat by default.

Type Default
component MessageInputFlat

ThreadStart

Custom UI component to display the start of a threaded MessageList.

Type Default
component DefaultThreadStart

Timestamp

Custom UI component to display a date used in timestamps. It's used internally by the default MessageTimestamp, and to display a timestamp for edited messages.

Type Default
component Timestamp

TypingIndicator

Custom UI component for the typing indicator.

Type Default
component TypingIndicator

UnreadMessagesNotification

Custom UI component that indicates a user is viewing unread messages. It disappears once the user scrolls to UnreadMessagesSeparator.

Type Default
component UnreadMessagesNotification

UnreadMessagesSeparator

Custom UI component inserted before the first message marked unread.

Type Default
component UnreadMessagesSeparator

VirtualMessage

Custom UI component to display a message in the VirtualizedMessageList.

Type Default
component MessageSimple