This is beta documentation for Stream Chat React Native SDK v9. For the latest stable version, see the latest version (v8) .

MessageContent

Renders message content inside MessageList. This is the default component for the MessageContent prop.

For lightweight decoration around the main content body, use MessageContentTopView, MessageContentBottomView, MessageContentLeadingView, and MessageContentTrailingView instead of replacing MessageContent entirely.

Best Practices

  • Keep content rendering lightweight to avoid list performance issues.
  • Prefer the MessageContent*View slot overrides for lightweight decoration around the body instead of replacing MessageContent.
  • Use useMessageContext() inside prop-less content slot overrides when you need message state such as alignment, message, or isMyMessage.
  • Respect messageContentOrder so attachments, polls, and text appear consistently.
  • Keep press handlers fast and side-effect free.
  • Keep padding overrides predictable across message types.

Props

additionalPressableProps

Extra props passed to the underlying Pressable used in message components like MessageContent.

Type
object

enableMessageGroupingByUser

Whether message grouping by user is enabled.

Type
boolean

backgroundColor

Message content background color.

Type
ColorValue

goToMessage

Scrolls to a specific message in the chat.

TypeDefault
(messageId: string) => void| undefinedundefined

groupStyles

Position of the message within a group of consecutive messages from the same user. Use groupStyles to style messages based on position (for example, avatars show only on the last message).

Type
array of enum('top', 'bottom', 'middle', 'single')

isMessageAIGenerated

Whether a message should be treated as AI-generated.

Type
function

isMyMessage

True if the message was sent by the current user.

Type
boolean

isMessageReceivedOrErrorType

Whether the message is incoming or in an error state.

Type
boolean

message

Message object.

Type
Message type

messageContentOrder

Order of message content.

Example: ['quoted_reply', 'attachments', 'file', 'gallery', 'text']

Type
array

messageGroupedSingleOrBottom

Whether the message group style is single or bottom.

Type
boolean

myMessageTheme

Theme applied to the current user’s messages.

Type
object

Memoize this object or pass a stable reference.

noBorder

If true, the message content has no border.

TypeDefault
Boolean| undefinedfalse

isVeryLastMessage

Whether the message is the very last item in the list.

Type
boolean

onLongPress

Default long press handler for message UI.

Type
function

onPress

Default press handler for message UI.

Type
function

onPressIn

Default pressIn handler for message UI.

Type
function

otherAttachments

All attachments except file and image.

Type
Array

preventPress

Disable press interactions for this message content.

Type
boolean

threadList

True if the current message is part of a thread.

Type
Boolean

hidePaddingTop

Hide top padding in content container.

Type
boolean

hidePaddingHorizontal

Hide horizontal padding in content container.

Type
boolean

hidePaddingBottom

Hide bottom padding in content container.

Type
boolean

Slot Overrides

MessageContentTopView, MessageContentBottomView, MessageContentLeadingView, and MessageContentTrailingView are optional prop-less slots rendered around the main message content body.

If a slot is not provided, nothing is rendered for that position. MessageContent only creates the horizontal wrapper for Leading and Trailing when at least one of those overrides is provided, so the default render tree stays unchanged otherwise.

If your custom slot needs message state such as alignment, message, or isMyMessage, read it with useMessageContext() inside the component.

Example

import { Channel, useMessageContext } from "stream-chat-react-native";
import { Text, View } from "react-native";

const CustomContentTopView = () => {
  const { isMyMessage } = useMessageContext();

  return isMyMessage ? null : <Text>Incoming</Text>;
};

const CustomContentBottomView = () => {
  const { message } = useMessageContext();

  return message.pinned ? <Text>Pinned</Text> : null;
};

const CustomContentLeadingView = () => {
  const { alignment } = useMessageContext();

  return <View style={{ width: alignment === "left" ? 8 : 0 }} />;
};

const CustomContentTrailingView = () => {
  const { alignment } = useMessageContext();

  return <View style={{ width: alignment === "right" ? 8 : 0 }} />;
};

<Channel
  MessageContentTopView={CustomContentTopView}
  MessageContentBottomView={CustomContentBottomView}
  MessageContentLeadingView={CustomContentLeadingView}
  MessageContentTrailingView={CustomContentTrailingView}
/>;

UI Component Props

MessageContentTopView

Renders an optional prop-less component above the main message content body.

TypeDefault
ComponentType | undefinedundefined

MessageContentBottomView

Renders an optional prop-less component below the main message content body.

TypeDefault
ComponentType | undefinedundefined

MessageContentLeadingView

Renders an optional prop-less component to the left of the main message content body.

If neither MessageContentLeadingView nor MessageContentTrailingView is provided, MessageContent does not create the horizontal wrapper around the body.

TypeDefault
ComponentType | undefinedundefined

MessageContentTrailingView

Renders an optional prop-less component to the right of the main message content body.

If neither MessageContentLeadingView nor MessageContentTrailingView is provided, MessageContent does not create the horizontal wrapper around the body.

TypeDefault
ComponentType | undefinedundefined

Attachment

Renders attachments in MessageList.

Available props:

  • attachment {object}
TypeDefault
ComponentTypeAttachment

FileAttachmentGroup

Renders a group of file attachments when a message has multiple files.

TypeDefault
ComponentTypeFileAttachmentGroup

Renders image attachments in MessageList.

TypeDefault
ComponentTypeGallery

MessageLocation

Renders location content for messages with location attachments.

Type
ComponentType

Reply

Renders a preview of the parent message for quoted replies.

TypeDefault
ComponentTypeReply

StreamingMessageView

Renders AI-streamed text when isMessageAIGenerated(message) is true.

Type
ComponentType