Javascript socket.io-client和useEffect未更新

Javascript socket.io-client和useEffect未更新,javascript,reactjs,socket.io,Javascript,Reactjs,Socket.io,我试图在上的套接字中获取更新的值,但它没有获取更新的值。每当我更新react钩子值时,它不会反映套接字内部。下面是我的代码 //socketIO in client useEffect(() => { const socket = socketIOClient(ENDPOINT); socket.on("FromAPI", data => { console.log(muteList); // here is my react

我试图在上的套接字中获取更新的值,但它没有获取更新的值。每当我更新react钩子值时,它不会反映套接字内部。下面是我的代码

//socketIO in client 

useEffect(() => {

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

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


  }, []);

套接字服务器每20秒发送一次更新。如何获取套接字中更新的react hook值

如果
互斥列表
恰好未用于渲染,则可以使用ref:

const muteListRef = useRef([]);
并使用
muteListRef.current=someNewMuteList
对其进行更改

如果使用
互斥列表
进行渲染,则需要状态。一个选项是每次列表更改时重新添加侦听器:

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来解决问题,但这不是一种非常优雅的方法。

取决于您在回调中要执行的操作,而不是记录
互斥列表
@CertainPerformance。我的程序根据它接收的数据和互斥列表挂钩的exlusion列表发送警报。互斥列表是基于按钮单击的项目列表。所以我比较了互斥列表和数据