Javascript 从socket.io接收数据时如何重新呈现组件?
我正在尝试使用React和socket.io构建一个实时多人游戏,因此当用户登录时,我使用socket.io在服务器端的数组中传递他的名字,然后游戏组件显示出来,我映射数组以显示所有玩家的名字 因此,第一个玩家登录,他的名字显示在他的窗口上,第二个玩家登录,然后在他的窗口上获得他的名字+第一个玩家的名字,但是第一个玩家的窗口不会更新以显示在他之后登录的第二个玩家 当从socket.io接收数据时,如何触发组件上的渲染Javascript 从socket.io接收数据时如何重新呈现组件?,javascript,reactjs,socket.io,Javascript,Reactjs,Socket.io,我正在尝试使用React和socket.io构建一个实时多人游戏,因此当用户登录时,我使用socket.io在服务器端的数组中传递他的名字,然后游戏组件显示出来,我映射数组以显示所有玩家的名字 因此,第一个玩家登录,他的名字显示在他的窗口上,第二个玩家登录,然后在他的窗口上获得他的名字+第一个玩家的名字,但是第一个玩家的窗口不会更新以显示在他之后登录的第二个玩家 当从socket.io接收数据时,如何触发组件上的渲染 import React,{Component}来自“React” 从“语义
import React,{Component}来自“React”
从“语义ui反应”导入{Button}
从“../api”导入套接字
类connectedUsers扩展组件{
建造师(道具){
超级(道具)
this.state={players:[]}
}
handleData=(数据)=>{
this.setState({players:data})
console.log('handleData'+数据);
}
componentDidMount(){
socket.on('playerList',this.handleData)
}
render(){
log('render'+this.state.players);
返回(
{this.state.players.map(player=>
{player}
)}
)
}
}
导出默认连接用户
好,所以我尝试在服务器端的第一个socket.emit之后添加一个socket.broadcast.emit,它成功了,所有新窗口都会更新新的播放器列表,但我不知道为什么!
有人对此有想法吗
module.exports=函数(io){
让玩家=[]
io.on('连接',套接字=>{
socket.on('playerConnected',(player)=>{
球员。推(球员)
socket.emit('playerList',players)
socket.broadcast.emit('playerList',players)
})
socket.on('disconnect',()=>{
console.log('用户断开连接')
})
})
}
好,现在它与io.emit一起工作,而不是socket.emit+socket.broadcast.emit
下面是一个工作示例
module.exports=函数(io){
让玩家=[]
io.on('连接',套接字=>{
socket.on('playerConnected',(player)=>{
球员。推(球员)
io.emit('playerList',玩家)
})
socket.on('disconnect',()=>{
console.log('用户断开连接')
})
})
}
是console.log('handleData'+数据);发生?是否console.log('handleData'+数据)代码>打印任何内容?是的,它会打印播放器阵列。您是否缺少播放器连接
从何处调用?请提供完整示例和所有文件,因为看起来您没有显示所有文件是的,对不起,我添加了该文件,它位于提取行35I前面有一个表单,当前端验证正常时,我会向服务器发送提取帖子,若服务器说ok,那个么我将其添加到db并向前端发送响应,然后在promiseok中执行socket.emit,所以现在我将socket.emit和socket.broadcast.emit替换为io.emit,并且一切正常