更新在线状态成员状态,导致在线状态成员列表将更新的用户显示为唯一的成员



在able中,我使用able React hook

在文档中,有一种在监视哪些用户进入房间时更新成员状态的方法。

const [presenceData, updateStatus] = usePresence("your-channel-name", "initial state");
// The `updateStatus` function can be used to update the presence data for the current client
updateStatus("new status");

这就是我遇到问题的地方。我获取状态数据并生成如下所示的用户列表。

const [presenceData, updateStatus] = usePresence(
channel,
{
id: user.id,
name: user.name,
isModerator: false,
},
(presenceUpdate) => {
presenceUpdate.action === "update" && console.log({ presenceUpdate });
}

所以我的列表生成正确。在回调中,我看到数据(presenceUpdate)被正确更新。当用户进入房间时,它们会被正确显示。当我开始更新状态(例如:将isModerator标志更改为true)时,presenceData列表显示了不正确的用户数据。它显示更新的用户两次(假设房间中有两个用户)。

updateStatus({...user, isModerator: true})

当与presentemember数据一起使用channel时,updateStatus有奇怪的副作用。

const [channel] = useChannel("your-channel-name", (message) => {
console.log(message);
});

当你使用updateStatus时,你只是应该传递更新的成员数据,还是有其他的事情你需要做,这样你的presentemember数据显示正确的信息?

我的期望:

presenceData = [{id: 1, name: 'John', isModerator:false},{id:2, name: 'Steve', isModerator: true}]

当我尝试通过将isModerator设置为true来更新Steve时得到的结果:

presenceData = [{id:2, name: 'Steve', isModerator: true},{id:2, name: 'Steve', isModerator: true}]

你知道我做错了什么吗?

我明白了。除了你自己的成员数据,你不能更新任何人的成员数据。我假设我可以让一个用户更新其他用户的状态,但最终发生的是每个人的状态都用updateStatus(object)中的对象更新。为了确保你没有更新其他用户的数据属性,有一些检查让你决定你是否是正在更新你的状态的用户。这样,updateStatus函数只会为该用户调用,而不会为其他所有用户调用。

最新更新