在使用Agora-RTC-React时,客户端的remoteUsers方法可能出现异常行为。在该方法中,远程用户的ID被添加到本地状态中,但是当远程用户离开时,该ID并不会被自动清除。这可能导致在后续使用remoteUsers方法时出现问题。
为了解决这个问题,可以使用Agora提供的onUserOffline事件来及时清除本地状态中的已离线用户ID。下面是一个参考示例:
import React, { useEffect, useState } from "react";
import AgoraRTC from "agora-rtc-sdk-ng";
import AgoraRTCAPI from "agora-rtc-react";
const App = () => {
const [client, setClient] = useState(null);
const [remoteUsers, setRemoteUsers] = useState([]);
useEffect(() => {
(async () => {
const client = AgoraRTC.createClient({ mode: "rtc", codec: "vp8" });
await client.join("", "", "", null);
setClient(client);
client.on("user-published", async (user, mediaType) => {
if (mediaType === "video") {
await client.subscribe(user, mediaType);
setRemoteUsers((prevState) => [...prevState, user.uid]);
}
});
client.on("user-unpublished", (user) => {
setRemoteUsers((prevState) =>
prevState.filter((uid) => uid !== user.uid)
);
});
client.on("user-left", (user) => {
setRemoteUsers((prevState) =>
prevState.filter((uid) => uid !== user.uid)
);
});
const tracks = await AgoraRTC.createMicrophoneAndCameraTracks();
await client.publish(tracks);
})();
}, []);
return (
{remoteUsers.map((uid) => (
))}
);
};
export default App;
在上面的示例中,使用了user-unpublished和user-left事件来在远程用户离开时清除本地状态中的已离线用户ID。这样可以确保远程用户的ID不会在后续使用remoteUsers方法时出现异常行为。
上一篇:Agora-RTC-Reactwindowisnotdefined-NEXT.js
下一篇:agora-rtm-sdk-1.5.0.js:8RTM:ERRORErrorCode5:loginfailedwithargs