事件监听
添加监听器
可以通过 addEventListener 方法,监听 IMLib 内部触发的各类事件通知。同一事件类型可以绑定多个监听函数,且它们都会被依次执行。
如果只希望监听某个事件一次,可以使用 onceEventListener。
JavaScript
// 消息监听
const Events = RongIMLib.Events;
RongIMLib.addEventListener(Events.MESSAGES, (evt) => {
console.log(evt.messages);
})
常见问题:监听中收到重复的数据
通常是由于业务层重复注册了相同监听器导致的。常见场景如在子组件的生命周期中注册监听,每次组件创建都会触发一次注册,最终导致收到重复数据。
推荐做法:
- 全局注册:建议在应用入口或统一管理位置注册监听器,确保只注册一次。
- 组件内注册需同步销毁:如确需在组件内监听,务必在组件销毁时移除监听器,防止内存泄露和重复回调。
移除监听
为了避免内存泄露,建议在不需要监听时,及时使用 removeEventListener 或 removeEventListeners 移除事件监听器。
removeEventListener
:移除某个事件对应的指定监听函数。removeEventListeners
:移除某个事件上所有的监听函数。
JavaScript
const Events = RongIMLib.Events
const listener = (evt) => console.log(evt.messages)
// 添加具体事件监听器
RongIMLib.addEventListener(Events.MESSAGES, listener)
// 移除具体事件监听器
RongIMLib.removeEventListener(Events.MESSAGES, listener)
// 移除具体事件的所有监听器
RongIMLib.removeEventListeners(Events.MESSAGES)
事件说明
下表列出了当前 IMLib 所支持的全部事件类型、返回值类型以及事件说明。你可以根据业务需求,灵活添加对应的事件监听器。
事件名称 | 返回值类型 | 说明 | 版本 |
---|---|---|---|
CONNECTING | void | 正在建立连接 | - |
CONNECTED | void | 已成功链接 | - |
DISCONNECT | ErrorCode | 已断开 注意:5.7.0 版本起,回调参数的类型由 ConnectionStatus 变更为 ErrorCode | |
SUSPEND | ErrorCode | 链接异常断开(自动重连) 注意:5.7.0 版本起,回调参数的类型由 ConnectionStatus & ErrorCode变更 为 ErrorCode | |
MESSAGES | IMessagesEvent | 收到消息 | |
READ_RECEIPT_RECEIVED | IReadReceiptReceivedEvent | 收到已读回执(单聊) | |
MESSAGE_RECEIPT_REQUEST | IMessageReceiptRequestEvent | 收到已读回执请求(群聊) | |
MESSAGE_RECEIPT_RESPONSE | IMessageReceiptResponseEvent | 收到已读回执响应(群聊) | |
CONVERSATION | IConversationEvent | 收到会话变更通知 | |
CHATROOM | IChatroomListenerData | 收到聊天室变更通知。注意:如需监听聊天室成员变化,请提交工单申请开通服务。 | |
EXPANSION | IExpansionListenerData | 收到扩展变更通知 | |
PULL_OFFLINE_MESSAGE_FINISHED | void | 离线消息拉取完成 | |
TAG | void | (适用于多端登录场景)收到标签列表标签通知,表示用户可能在其他端创建、移除或编辑某个标签。收到此通知时需主动调用 getTags 获取全部标签以更新 UI 渲染。该标签列表包含了所有用于标记会话的标签。 | |
CONVERSATION_TAG | void | (适用于多端登录场景)收到会话标签变动通知,表示用户可能在其他端修改了会话上所加的标签。收到此通知时需根据本地已渲染的会话列表,主动调用 getTagsFromConversation 逐个获取会话的所有标签,以更新 UI 渲染。 | |
TYPING_STATUS | ITypingStatusEvent | 收到正在输入状态通知 | |
MESSAGE_BLOCKED | IBlockedMessageInfo | 敏感词回调通知。需要提交工单开启服务后才能使用。默认关闭状态。 | 5.0.2 |
ULTRA_GROUP_ENABLE | void | 超级群会话列表同步完成,可以调用超级群相关接口; 5.20 版本开始,不再提供回调数据 | 5.2.0 |
OPERATE_STATUS | IOperateStatusNotify | 超级群输入状态通知 | 5.2.0 |
ULTRA_GROUP_MESSAGE_EXPANSION_UPDATED | IAReceivedMessage | 超级群消息扩展更新通知 | 5.2.0 |
ULTRA_GROUP_MESSAGE_MODIFIED | IAReceivedMessage | 超级群消息被修改通知 | 5.2.0 |
ULTRA_GROUP_MESSAGE_RECALLED | IAReceivedMessage | 超级群消息被撤回通知 | 5.2.0 |
ULTRA_GROUP_CHANNEL_TYPE_CHANGE | IUltraChannelChangeInfo | 超级群频道类型变更 | 5.4.2 |
ULTRA_GROUP_CHANNEL_DELETE | IUltraChannelDeleteInfo | 超级群频道被删除 | 5.4.2 |
ULTRA_GROUP_CHANNEL_USER_KICKED | IUltraChannelUserKickedInfo | 超级群私有频道成员被移除 | 5.4.2 |
DATABASE_UPGRADE_WILL_START | void | 数据库升级开始,仅 Electron 支持 | 5.10.4 |
DATABASE_UPGRADING | number | 数据库升级中,仅 Electron 支持 | 5.10.4 |
DATABASE_UPGRADE_DID_COMPLETE | ErrorCode | 数据库 升级结束,仅 Electron 支持 | 5.10.4 |
GROUP_OPERATION | IGroupOperationInfo | 群组操作回调,可根据 IGroupOperationInfo 中的 operation 判断操作类型 | 5.12.0 |
GROUP_INFO_CHANGED | IGroupInfoChanged | 群组信息变更通知 | 5.12.0 |
GROUP_MEMBER_INFO_CHANGED | IGroupMemberInfoChanged | 群成员信息变更通知 | 5.12.0 |
GROUP_APPLICATION_EVENT | IGroupApplicationInfo | 用户申请或邀请事件及结果通知 | 5.12.0 |
GROUP_REMARK_CHANGED_SYNC | IGroupRemarkChangedSync | 群名称备注名更新多端同步通知 | 5.12.0 |
GROUP_FOLLOWS_CHANGED_SYNC | IGroupFollowsChangedSync | 群成员特别关注多端同步通知 | 5.12.0 |
FRIEND_ADDED | IFriendAdd | 添加好友通知 | 5.12.0 |
FRIEND_DELETE | IFriendDelete | 移除好友通知 | 5.12.0 |
FRIEND_APPLICATION_STATUS_CHANGED | IFriendApplicationStatusChange | 好友申请通知 | 5.12.0 |
FRIEND_CLEARED | number | 清楚全部好友通知,通过 Server Api 调用清除全部好友出发 | 5.12.0 |
FRIEND_INFO_CHANGED_SYNC | IFriendInfoChangedSync | 多端同步好友信息变更通知 | 5.12.0 |
CONVERSATIONS_SYNCED | void | 单群聊会话列表同步完成,需开启“会话列表支持超级群功能”,仅支持 Web 平台 | 5.20.0 |