Javascript Socket.io重置反应状态?
在使用React和Socket.io时,我遇到了一个奇怪的问题。感谢任何能够提供帮助的人 目标:Javascript Socket.io重置反应状态?,javascript,reactjs,socket.io,Javascript,Reactjs,Socket.io,在使用React和Socket.io时,我遇到了一个奇怪的问题。感谢任何能够提供帮助的人 目标: -->1. socket.io发出一个事件,用按钮列表对前端作出反应 -->2. react呈现按钮列表 -->3. 用户单击按钮 -->4. 按钮上的文本作为消息发送 -->5. 将状态从{hidden:false}设置为{hidden:true} -->6. 按钮被隐藏,所以用户无法返回并单击它们 代码: import React,{Component}来自'React'; 从“uuid”导入
-->1. socket.io发出一个事件,用按钮列表对前端作出反应
-->2. react呈现按钮列表
-->3. 用户单击按钮
-->4. 按钮上的文本作为消息发送
-->5. 将状态从{hidden:false}设置为{hidden:true}
-->6. 按钮被隐藏,所以用户无法返回并单击它们 代码:
import React,{Component}来自'React';
从“uuid”导入uuidv4;
类按钮消息扩展组件{
建造师(道具){
超级(道具);
此.state={
隐藏:假
};
}
把手按钮点击=(事件)=>{
this.setState({hidden:true});
this.props.socket.emit('newMessage',event.target.textContent,this.props.user);
};
render(){
const buttons=this.props.buttons;
返回(
{!这个。状态。隐藏&&
{
按钮。地图((按钮)=>{
返回(
{button.buttonText}
);
})
}
}
);
}
}
导出默认按钮消息代码>结果表明,我使用uuidv4()为呈现该组件的组件生成了一个唯一键
。。。
返回(
{message.buttons&&}
)
…
您发布的代码看起来不错。你能展示呈现这个的组件吗?也许是因为某种原因,它被安装/卸载了?你有更高层次的套接字监听器吗?我能想象的唯一场景是完全重新安装组件。尝试将日志项添加到onComponentWillUnmount
Oh。有什么错误吗?也许socket.emit
会抛出一个错误来停止JS执行?@azium是的,这就是问题所在!我正在使用uuidv4()为呈现此项的组件生成唯一键。进行了一些挖掘,发现每次组件渲染时都会重新生成密钥,这将导致重新安装子组件。谢谢你给我指明了正确的方向@乔纳斯。是的,这就是问题所在!请看下面我自己的答案。谢谢你给我指明了正确的方向!