Kit*_*ski 2 websocket reactjs react-hooks
我的反应组件正在通过 websocket 从服务器接收消息。当我尝试使用 useState() 更新状态时,套接字会重复。
如果我这样做...
import React, {useState} from 'react'
export default () => {
let[message, setMessage] = useState()
let ws = new WebSocket("ws://blah");
ws.onmessage = (e) => {
let obj = JSON.parse(e.data);
// event name
console.log(obj.event);
// event data
console.log(obj.value);
// setMessage(obj.value)
ws.close
}
return <div>
{message}
</div>
}
Run Code Online (Sandbox Code Playgroud)
然后控制台按预期单独显示每条消息
但是如果我回评论,setMessage(object.value)那么每条消息的所有连接都会重复
setMessage() 以某种方式导致连接累积
那是因为您要在每次渲染时创建一个新的 websocket。
由于连接到网络套接字是一种“副作用”,您将需要使用 useEffect
import React, {useState} from 'react'
export default () => {
let [message, setMessage] = useState()
React.useEffect(() => {
let ws = new WebSocket("ws://blah");
ws.onmessage = (e) => {
let obj = JSON.parse(e.data);
// event name
console.log(obj.event);
// event data
console.log(obj.value);
setMessage(obj.value);
};
return () => {
ws.close()
}
}, [])
return (
<div>
{message}
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1046 次 |
| 最近记录: |