Javascript socket.io-client和useEffect未更新
我试图在上的套接字中获取更新的值,但它没有获取更新的值。每当我更新react钩子值时,它不会反映套接字内部。下面是我的代码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
//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列表发送警报。互斥列表是基于按钮单击的项目列表。所以我比较了互斥列表和数据