const [track1, settrack1] = useState('')
const [track2, settrack2] = useState('')
const [shownotfound, setshownotfound] = useState(false)
useEffect(() => {
socket.on('found', function(data) {
let ob = JSON.parse(data)
console.log('found', data)
settrack1(ob.track1)
settrack2(ob.track2)
})
}, [track1])
useEffect(() => {
socket.on('notfound', function(data) {
settrack1('')
settrack2('')
setshownotfound(true)
})
}, [track2])
如果sock事件为found
,则此代码将侦听来自websocket的事件;如果sock事件为not found
,则为其他事件。
问题,当服务器仅发出事件found
时,代码将执行所有情况。
我的钩子有什么问题吗?
答案 0 :(得分:1)
在第一个useEffect
中,您呼叫了settrack1
和settrack2
。在这种情况下,settrack2
将启动第二个useEffect
。同样的事情发生在第二个useEffect
上。这就是为什么代码在所有情况下都可以执行的原因。
答案 1 :(得分:0)
那是因为您在第二个useEffect [track2]中添加了track2作为依赖项。当“找到”启动时,会有settrack2更改track2并启动第二个useEffect。