状态值不会在事件监听器中更新

时间:2020-08-07 18:32:44

标签: reactjs youtube-api react-hooks

我正在使用这段代码来确定youtube播放器状态更改时该怎么办,并且始终希望在用户不是主机的情况下返回:

const [host, setHost] = useState()
const [yourID, setYourID] = useState();

useEffect(() => {
        socketRef.current = io.connect('/');

        socketRef.current.on("host", id => {
            setHost(id);
        })

        socketRef.current.on("your id", id => {
            setYourID(id);
        })

    }, []);

function onPlayerStateChange(e) {
        console.log(host)
        console.log(yourID)
        if (host !== yourID) return

        switch (e.data) {
            // the logic to determine what to do...
        }
    }

但是,hostyourID总是返回undefined。另一方面,在单击某些按钮时使用类似这样的功能时,它将返回正确的值:

   function test() {
        console.log(host)
        console.log(yourID)
    }

 <button onClick={test}>test</button>

我的问题如下:

  1. 为什么值不会在onPlayerStateChange中更新,而在其他函数中更新?
  2. 我应该如何重写代码?使用useRef对我有用,但是我也使用yourIDhost来有条件地呈现页面上的某些元素,所以那是行不通的。

0 个答案:

没有答案