反应钩子和useeffect删除我的状态意外结果

时间:2020-11-07 07:35:11

标签: reactjs

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时,代码将执行所有情况。

我的钩子有什么问题吗?

2 个答案:

答案 0 :(得分:1)

在第一个useEffect中,您呼叫了settrack1settrack2。在这种情况下,settrack2将启动第二个useEffect。同样的事情发生在第二个useEffect上。这就是为什么代码在所有情况下都可以执行的原因。

答案 1 :(得分:0)

那是因为您在第二个useEffect [track2]中添加了track2作为依赖项。当“找到”启动时,会有settrack2更改track2并启动第二个useEffect。