Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从socket.io接收数据时如何重新呈现组件?_Javascript_Reactjs_Socket.io - Fatal编程技术网

Javascript 从socket.io接收数据时如何重新呈现组件?

Javascript 从socket.io接收数据时如何重新呈现组件?,javascript,reactjs,socket.io,Javascript,Reactjs,Socket.io,我正在尝试使用React和socket.io构建一个实时多人游戏,因此当用户登录时,我使用socket.io在服务器端的数组中传递他的名字,然后游戏组件显示出来,我映射数组以显示所有玩家的名字 因此,第一个玩家登录,他的名字显示在他的窗口上,第二个玩家登录,然后在他的窗口上获得他的名字+第一个玩家的名字,但是第一个玩家的窗口不会更新以显示在他之后登录的第二个玩家 当从socket.io接收数据时,如何触发组件上的渲染 import React,{Component}来自“React” 从“语义

我正在尝试使用React和socket.io构建一个实时多人游戏,因此当用户登录时,我使用socket.io在服务器端的数组中传递他的名字,然后游戏组件显示出来,我映射数组以显示所有玩家的名字

因此,第一个玩家登录,他的名字显示在他的窗口上,第二个玩家登录,然后在他的窗口上获得他的名字+第一个玩家的名字,但是第一个玩家的窗口不会更新以显示在他之后登录的第二个玩家

当从socket.io接收数据时,如何触发组件上的渲染

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,并且一切正常