繁体   English   中英

socket.io-client 和 useEffect 没有得到更新的反应钩子

[英]socket.io-client and useEffect not getting updated react hook

我正在尝试在套接字上获取更新的反应挂钩值,但它没有得到更新的值。 每当我更新我的反应挂钩值时,它都不会反映在套接字内部。 下面是我的代码

//socketIO in client 

useEffect(() => {

    const socket = socketIOClient(ENDPOINT);
    socket.on("FromAPI", data => {

      console.log(muteList); // here is my react hook 
    });


  }, []);

套接字服务器每 20 秒发送一次更新。 我该怎么做才能在套接字中获取更新的反应挂钩值

如果muteList碰巧不用于渲染,则可以使用 ref 代替:

const muteListRef = useRef([]);

并用muteListRef.current = someNewMuteList更改它。

如果使用muteList进行渲染,则需要 state。 一种选择是在每次列表更改时重新添加侦听器:

const socketRef = useRef();
if (!socketRef.current) {
  socketRef.current = socketIOClient(ENDPOINT);
}
const [muteList, setMuteList] = useState([]);
useEffect(() => {
  const listener = (data) => {
    console.log(muteList);
    // do other stuff with muteList
  };
  socketRef.current.on('FromAPI', listener);
  // Remove this listener whenever the component unmounts
  // or whenever muteList changes
  return () => socketRef.current.off('FromAPI', listener);
}, [muteList];

您也可以同时使用 ref 和 state 来解决问题,但这不是一个非常优雅的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM