Reactjs 反应:socket.io和useffect工作不正常
因此,我正在使用react学习socket.io,我遇到了一个问题。我想发生的是,当用户在字段中输入并提交某个内容时,它会使每个人的浏览器的标题成为该输入。但是,如果您的文本字段等于与每个人传播的消息(意味着可能是您单击了enter),则标题将变为“you changed it” 但是,在io.on(message)中,当它检查输入状态是否等于消息时,它总是根据消息检查状态的初始值,即“” 我猜这是因为useEffect在状态为“”时在开始时被调用,所以它硬编码io.on(消息)为当时的状态。我认为要解决这个问题,我只需要将输入作为useEffect依赖性数组的一部分,但这不会覆盖当前的io。在(消息)上,它会重载它,因此两者都被调用。我不知道怎么解决这个问题Reactjs 反应:socket.io和useffect工作不正常,reactjs,socket.io,Reactjs,Socket.io,因此,我正在使用react学习socket.io,我遇到了一个问题。我想发生的是,当用户在字段中输入并提交某个内容时,它会使每个人的浏览器的标题成为该输入。但是,如果您的文本字段等于与每个人传播的消息(意味着可能是您单击了enter),则标题将变为“you changed it” 但是,在io.on(message)中,当它检查输入状态是否等于消息时,它总是根据消息检查状态的初始值,即“” 我猜这是因为useEffect在状态为“”时在开始时被调用,所以它硬编码io.on(消息)为当时的状态。我
import React from 'react'
import io from 'socket.io-client'
const SocketTest = (props: any) => {
const socket = io('http://localhost:4000')
const [input, setInput] = React.useState<string>('')
const handleNewMessage = (message: string) => {
console.log(input)
if (input !== message){
document.title = message
} else {
document.title = 'You changed it!'
}
}
React.useEffect(() => {
socket.on('message', (message: string) => {
handleNewMessage(message)
})
}, [])
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
setInput(e.target.value)
}
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault()
socket.emit('message', input)
}
return (
<div>
<h2 className="center">{ input }</h2>
<form onSubmit={ (e) => handleSubmit(e) }>
<input type="text" placeholder="Enter text" onChange={ (e) => handleChange(e) }/>
</form>
</div>
)
}
export default SocketTest
从“React”导入React
从“socket.io客户端”导入io
const SocketTest=(道具:任意)=>{
常量套接字=io('http://localhost:4000')
常量[input,setInput]=React.useState(“”)
const handleNewMessage=(消息:字符串)=>{
console.log(输入)
如果(输入!==消息){
document.title=消息
}否则{
document.title='您更改了它!'
}
}
React.useffect(()=>{
socket.on('message',(message:string)=>{
handleNewMessage(消息)
})
}, [])
常量handleChange=(e:React.ChangeEvent)=>{
设置输入(如目标值)
}
const handleSubmit=(e:React.FormEvent)=>{
e、 预防默认值()
socket.emit('message',input)
}
返回(
{input}
handleSubmit(e)}>
handleChange(e)}/>
)
}
导出默认SocketTest
我也相信我可以通过广播信息而不是发出信息来解决这个问题,但我正在努力学习如何解决这个问题。这是否回答了你的问题?对绝对传奇这能回答你的问题吗?对绝对传奇