
Field | Type | Default | Description |
alignment | 'left' |'right' |'two-sided' | 'two-sided' | Sets message alignment mode. left: All messages are left-aligned. right: All messages are right-aligned. two-sided: Sent messages are right-aligned, received messages are left-aligned. |
enableReadReceipt | boolean | false | Enables the message read receipt feature. |
messageActionList | IMessageAction[] | ['copy', 'recall', 'quote', 'forward', 'delete'] | Customizes the list of message actions (e.g., copy, recall, delete, etc.). |
messageAggregationTime | number | 300 | Sets the message aggregation interval (seconds). Consecutive messages from the same sender within this interval are grouped together. |
filter | (message: MessageInfo) => boolean | undefined | Message filter function to control which messages are shown. |
className | string | undefined | Custom CSS class for the root container. |
style | React.CSSProperties | undefined | Custom inline styles for the root container. |
Message | React.ComponentType | Message | Custom message component renderer. |
MessageTimeDivider | React.ComponentType | MessageTimeDivider | Custom time divider component between messages. |
'left' | 'right' | 'two-sided'alignment prop determines how messages are aligned:two-sided: Messages sent by others are left-aligned; messages sent by you are right-aligned (default).left: All messages are left-aligned.right: All messages are right-aligned.booleanfalse.IMessageAction[]['copy', 'recall', 'quote', 'forward', 'delete'].interface IMessageAction {key: 'copy' | 'recall' | 'quote' | 'forward' | 'delete' | string;label?: string;icon?: React.ReactNode;onClick?: (message: MessageInfo) => void;visible?: ((message: MessageInfo) => boolean) | boolean;component?: React.ComponentType<{ message: MessageInfo }>;style?: React.CSSProperties;}
useMessageActions to retrieve and customize the full set of message actions.forward, copy, recall, quote, delete:import { Chat, MessageList, useMessageActions } from '@tencentcloud/chat-uikit-react';const App = () => {const actions = useMessageActions(['forward', 'copy', 'recall', 'quote', 'delete']);return (<Chat><MessageList messageActionList={actions} /></Chat>);}
forward, copy, and recall:import { Chat, MessageList, useMessageActions } from '@tencentcloud/chat-uikit-react';const App = () => {const actions = useMessageActions(['forward', 'copy', 'recall']);return (<Chat><MessageList messageActionList={actions} /></Chat>);}
recallimport { Chat, MessageList, useMessageActions, MessageType } from '@tencentcloud/chat-uikit-react';const ChatApp = () => {const actions = useMessageActions(['copy', {key: 'recall',label: 'Recall ⚠️',style: {color: 'orange'},visible: (message) => message.messageType === MessageType.Text,}, 'quote', 'forward', 'delete']);return (<Chat><MessageList messageActionList={actions} /></Chat>);}

import { useMessageAction } from '@tencentcloud/chat-uikit-react';import { yourApi } from '@/api/yourApi';const customActions = {key: 'like',label: 'Like',icon: <span>👍</span>,style: {color: '#E53888',},visible: (message) => message.isSentBySelf === false,onClick: (message) => {yourApi.likeMessage(message.msgID);}}function ChatApp() {const actions = useMessageAction(['forward', 'copy', 'recall', customActions, 'quote', 'delete']);return <MessageList messageActionList={actions} />;}

number300 seconds.(message: MessageInfo) => booleanundefined.import { MessageList, MessageType } from '@tencentcloud/chat-uikit-react';const messageFilter = (message) => {// Hide text messages sent by users whose nickname contains '_robot' and content contains 'operation-failed'if (message.from.nickname?.includes('_robot')&& message.messageType === MessageType.Text&& message.messagePayload?.text?.includes('operation-failed')) {return false;}return true;};function ChatApp() {return <MessageList filter={messageFilter} />;}
stringundefined.React.CSSPropertiesundefined.React.ComponentTypeMessage component.import { Chat, MessageList, Message, MessageType } from '@tencentcloud/chat-uikit-react';function CustomMessage(props) {const { message } = props;if (message.messageType === MessageType.Custom) {const { businessID, ...restData } = JSON.parse(message.messagePayload.data);if (businessID === 'text_link') {return (<div><div>{restData.text}</div><a href={restData.link}>Go to external site {restData.link}</a></div>);}} else {// Use default message component for other message typesreturn <Message {...props} />;}}function ChatApp() {return (<Chat><MessageList Message={CustomMessage} /></Chat>);}
React.ComponentTypeMessageTimeDivider.import { Chat, MessageList, type MessageInfo } from '@tencentcloud/chat-uikit-react';const BusinessTimeDivider = ({ prevMessage, currentMessage }: { prevMessage: MessageInfo, currentMessage: MessageInfo }) => {if (!prevMessage || !currentMessage) return null;// For each message, compare timestamps to determine if a divider is neededconst currentTime = currentMessage.timestamp ?? new Date();const prevTime = prevMessage.timestamp ?? new Date();// Show divider if it's a new day or more than 4 hours apartconst shouldShow = currentTime.toDateString() !== prevTime.toDateString() ||(currentTime.getTime() - prevTime.getTime()) > 4 * 60 * 60 * 1000;if (!shouldShow) return null;// Check for working hours (9:00-18:00, Monday to Friday)const isWorkingTime = () => {const hour = currentTime.getHours();const day = currentTime.getDay();return day >= 1 && day <= 5 && hour >= 9 && hour <= 18;};const timeLabel = isWorkingTime() ? 'Working Hours' : 'Off Hours';const timeColor = isWorkingTime() ? '#52c41a' : '#faad14';return (<div style={{ textAlign: 'center', margin: '16px 0' }}><span style={{backgroundColor: timeColor,color: 'white',padding: '2px 8px',borderRadius: '12px',marginRight: '8px'}}>{timeLabel}</span>{currentTime.toLocaleString()}</div>);};function ChatApp() {return (<Chat><MessageList MessageTimeDivider={BusinessTimeDivider} /></Chat>);}

フィードバック