【发布时间】:2020-10-12 00:56:38
【问题描述】:
我目前正在开发基于 socket.io 的聊天应用程序。
我找到了很多关于如何管理消息的教程,但我对用户列表感到困惑。
我想显示一个已连接用户的列表,有一些变化:
- 当用户加入聊天时,他必须选择一个名字
- 一旦他选择了一个名字,他就可以说话,并看到一个包含其他用户名字的列表
我在最后一部分苦苦挣扎:对于消息,这很容易,我可以获取数据库中的现有消息。但是如何检索和显示已连接用户的列表?
我在我的 react 应用程序中尝试了以下片段:
const [players, setPlayers] = useState([])
const [step, setStep] = useState('lobby')
const socket = socketIOClient(ENDPOINT);
useEffect(() => {
socket.emit('data', {
type: 'joinedRoom',
})
socket.on("FromAPI", data => {
if (data.type === 'newPlayer') {
setPlayers([{
name: data.payload.name,
}])
}
if (data.type === 'joinedRoom') {
socket.emit('data', {
type: 'getPlayers',
players,
})
}
if (data.type === 'getPlayers') {
if (data.players && data.players.length) {
setPlayers([...players, data.players])
}
}
});
但这不起作用:对于任何新用户,players 状态片段被初始化为一个空数组。
一般来说,我对 websockets 还很陌生,任何有关如何处理数据共享的帮助将不胜感激 :)
【问题讨论】: