-
Notifications
You must be signed in to change notification settings - Fork 4
聊天组件 Chat
张东 edited this page Jun 5, 2024
·
1 revision
Chat
组件为聊天界面,提供了以下功能:
- 发送和接收消息, 包括文本、表情、图片、语音、视频、文件、名片和合并类型的消息。
- 对消息进行表情回复、引用、撤回、删除、转发、固定、翻译和修改的操作。
- 展示消息状态(发送中、发送成功、已送达、已读、发送失败)。
- 清除本地消息。
- 删除会话。
- 从服务器拉取历史消息(消息漫游)。
- 展示正在输入状态。
- 跳转到最新消息。
- 音视频通话。
import React from "react";
import { Chat } from "easemob-chat-uikit";
import "easemob-chat-uikit/style.css";
const ChatContainer = () => {
return (
<div style={{ width: "70%", height: "100%" }}>
<Chat />
</div>
);
};
下面示例了怎样实现自定义 Chat 组件。
以文本消息为例,你可以按如下方式修改消息气泡样式:
- 使用
renderMessageList
方法自定义渲染消息列表。 - 使用
renderMessage
方法自定义渲染消息。 - 通过
TextMessage
的属性自定义文本消息。
import React from "react";
import { Chat, MessageList, TextMessage } from "easemob-chat-uikit";
import "easemob-chat-uikit/style.css";
const ChatContainer = () => {
const renderTxtMsg = (msg) => {
return (
<TextMessage
bubbleStyle={{ background: "hsl(135.79deg 88.79% 36.46%)" }}
shape="ground"
status={msg.status}
avatar={<Avatar style={{ background: "pink" }}>A</Avatar>}
textMessage={msg}
></TextMessage>
);
};
const renderMessage = (msg) => {
if (msg.type === "txt") {
return renderTxtMsg(msg);
}
};
return (
<div style={{ width: "70%", height: "100%" }}>
<Chat
renderMessageList={() => <MessageList renderMessage={renderMessage} />}
/>
</div>
);
};
在消息编辑器添加一个自定义图标,实现指定的功能:
- 使用
renderMessageInput
方法自定义渲染消息编辑器。 - 使用
actions
自定义MessageInput
组件。
import React from "react";
import { Chat, Icon, MessageInput } from "easemob-chat-uikit";
import "easemob-chat-uikit/style.css";
const ChatContainer = () => {
// 在消息编辑器中添加图标
const CustomIcon = {
visible: true,
name: "CUSTOM",
icon: (
<Icon
type="DOC"
onClick={() => {
console.log("click custom icon");
}}
></Icon>
),
};
const actions = [...MessageInput.defaultActions];
// 在 textarea 后面插入自定义图标
actions.splice(2, 0, CustomIcon);
return (
<div style={{ width: "70%", height: "100%" }}>
<Chat renderMessageInput={() => <MessageInput actions={actions} />} />
</div>
);
};
- 使用
messageStore
中提供的sendMessage
方法发送自定义消息。 - 使用
renderMessage
渲染自定义消息。
tip
为了保证消息在当前会话中展示,消息中的 to
字段必须是对方的用户 ID 或者群组的 ID。
import React from "react";
import {
Chat,
MessageList,
TextMessage,
rootStore,
MessageInput,
Icon,
} from "easemob-chat-uikit";
import "easemob-chat-uikit/style.css";
const ChatContainer = () => {
// 展示自定义消息
const renderCustomMsg = (msg) => {
return (
<div
style={{
background: 'hsla(203, 100%,60%, 1)',
margin: '100px',
borderRadius: '30px',
textAlign: 'center',
}}
>
<h1>Business Card </h1>
<div>{msg.customExts.id}</div>
</div>
);
};
const renderMessage = (msg) => {
if (msg.type === "custom") {
return renderCustomMsg(msg);
}
};
// 在消息编辑器中添加图标
const CustomIcon = {
visible: true,
name: "CUSTOM",
icon: (
<Icon
type="DOC"
onClick={() => {
sendCustomMessage();
}}
></Icon>
),
};
const actions = [...MessageInput.defaultActions];
actions.splice(2, 0, CustomIcon);
// 实现发送自定义消息
const sendCustomMessage = () => {
const customMsg = EasemobChat.message.create({
type: "custom",
to: "targetId", //消息接收方:单聊为对端用户 ID,群聊为群组 ID。
chatType: "singleChat",
customEvent: "CARD",
customExts: {
id: "userId3",
},
});
rootStore.messageStore.sendMessage(customMsg).then(() => {
console.log("send success");
});
};
return (
<div style={{ width: "70%", height: "100%" }}>
<Chat
renderMessageList={() => <MessageList renderMessage={renderMessage} />}
renderMessageInput={() => <MessageInput actions={actions} />}
/>
</div>
);
};
Chat
组件包含以下属性:
属性 | 类型 | 描述 |
className | String | 组件的类名。 |
prefix | String | CSS 类名前缀。 |
headerProps | HeaderProps | Header 组件中的属性。 |
messageListProps | MsgListProps | MessageList 组件中的属性。 |
messageInputProps | MessageInputProps | MessageInput 组件中的属性。 |
renderHeader | (cvs: CurrentCvs) => React.ReactNode | 自定义渲染 Header 组件的方法。 |
renderMessageList | () => ReactNode; | 自定义渲染 MessageList 组件的方法。 |
renderMessageInput | () => ReactNode; | 自定义渲染 MessageInput 组件的方法。 |
renderEmpty | () => ReactNode; | 自定义渲染空内容组件的方法。 |