产品动态
公告

字段 | 类型 | 默认值 | 描述 |
'left' | 'right' | 'two-sided' | 'two-sided' | 消息对齐方式。 left: 所有消息左对齐。 right: 所有消息右对齐。 two-sided: 发送消息右对齐,接收消息左对齐。 | |
boolean | false | 是否启用已读回执功能。 | |
IMessageAction[] | undefined | 自定义消息操作列表,例如复制、撤回、删除等。 | |
number | 300 | 消息聚合时间间隔(秒),相同发送者在此时间内的连续消息会被聚合显示。 | |
(message: IMessageModel) => boolean | undefined | 消息过滤函数,用于控制哪些消息需要显示。 | |
string | undefined | 自定义 CSS 类名。 | |
React.CSSProperties | undefined | 自定义内联样式。 | |
React.ComponentType | Message | 自定义消息组件。 | |
React.ComponentType | MessageTimeDivider | 自定义时间分隔线组件。 |
'left' | 'right' | 'two-sided'left、right、two-sided 三种模式。默认值为 'two-sided'。two-sided: 非本人的消息位于左侧,本人的消息位于右侧left: 所有消息位于左侧right: 所有消息位于右侧booleanfalse。IMessageAction[]['copy', 'recall', 'quote', 'forward', 'delete']。interface IMessageAction {key: 'copy' | 'recall' | 'quote' | 'forward' | 'delete' | string;label?: string;icon?: React.ReactNode;onClick?: (message: IMessageModel) => void;visible?: ((message: IMessageModel) => boolean) | boolean;component?: React.ComponentType<{ message: IMessageModel }>;style?: React.CSSProperties;}
useMessageAction 获取完整的消息操作列表,然后根据需要进行自定义。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、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 TUIChatEngine from '@tencentcloud/chat-uikit-engine';import { Chat, MessageList, useMessageActions } from '@tencentcloud/chat-uikit-react';const ChatApp = () => {const actions = useMessageActions(['copy', {key: 'recall',label: 'Recall ⚠️',style: {color: 'orange'},visible: (message) => message.type === TUIChatEngine.TYPES.MSG_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.flow === 'in',onClick: (message) => {yourApi.likeMessage(message.ID);}}function ChatApp() {const actions = useMessageAction(['forward', 'copy', 'recall', customActions, 'quote', 'delete']);return <MessageList messageActionList={actions} />;}

number300(秒)。(message: IMessageModel) => booleanundefined。import { MessageList } from '@/components/MessageList';import TUIChatEngine from '@tencentcloud/chat-uikit-engine';const messageFilter = (message) => {// 过滤掉发送者昵称包含 '_robot' 且内容包含 'operation-failed' 的文本消息if (message.nick?.includes('_robot')&& message.type === TUIChatEngine.TYPES.MSG_TEXT&& message.payload?.text?.includes('operation-failed')) {return false;}return true;};function ChatApp() {return <MessageList filter={messageFilter} />;}
stringundefined。React.CSSPropertiesundefined。React.ComponentTypeMessage 组件。import TUIChatEngine from '@tencentcloud/chat-uikit-engine';import { Chat, MessageList, Message } from '@tencentcloud/chat-uikit-react';function CustomMessage(props) {const { message } = props;if (message.type === TUIChatEngine.TYPES.MSG_CUSTOM) {const { businessID, ...restData } = JSON.parse(message.payload.data);if (businessID === 'text_link') {return (<div><div>{restData.text}</div><a href={restData.link}>跳转到外部网址 {restData.link}</a></div>);}} else {// 其他消息类型使用默认消息组件return <Message {...props} />;}}function ChatApp() {return (<Chat><MessageList Message={CustomMessage} /></Chat>);}
React.ComponentTypeMessageTimeDivider 组件。import { Chat, MessageList, MessageTimeDivider } from '@tencentcloud/chat-uikit-react';const BusinessTimeDivider = (props: React.ComponentProps<typeof MessageTimeDivider>) => {const { prevMessage, currentMessage } = props;if (!prevMessage || !currentMessage) return null;// 对于即将渲染的每一条消息获取当前消息和上一消息的时间,并转换为日期对象,判断是否跨天或间隔超过4小时const currentTime = new Date(currentMessage.time * 1000);const prevTime = new Date(prevMessage.time * 1000);// 跨天或间隔超过4小时才显示const shouldShow = currentTime.toDateString() !== prevTime.toDateString() ||(currentTime.getTime() - prevTime.getTime()) > 4 * 60 * 60 * 1000;if (!shouldShow) return null;// 判断工作时间 (9:00-18:00, 周一到周五)const isWorkingTime = () => {const hour = currentTime.getHours();const day = currentTime.getDay();return day >= 1 && day <= 5 && hour >= 9 && hour <= 18;};const timeLabel = isWorkingTime() ? '工作时间' : '非工作时间';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>);}

文档反馈