在 socket.on 个订阅者中使用当前变量值
Use current variable value within socket.on subscriber
所以我有以下问题,我有一个 socket.on("someevent", someFunction)
,我的问题是 someFunction 中的代码应该只在特定条件下执行,所以:
const [modalOpened, setModalOpened] = useState(false);
const [data, setData] = useState([]);
const handleSetData = (data) => {
!modalOpened && setData(data);
}
socket.on("someevent", (data) => {
handleSetData(data);
});
问题是,一旦创建了该事件侦听器,它就会接受 modalOpened
的当前值并坚持下去,我希望它始终使用当前的实际值,所以如何我应该通过引用传递它吗?
我已经尝试创建另一个函数,但它仍然无法使用它:
const checkModalOpened = () => { return modalOpened }
它仍然坚持它捕获的任何值。
Aaaa,我知道我以前解决过这个问题!!!!
您必须在 useEffect 中设置监听器,否则它会在每次重新渲染时重新创建。
详情在这里:
您应该将事件侦听器移动到 useEffect
函数中。
useEffect(() => {
const listener = (data) => {
if (!modalOpened) {
setData(data);
}
};
socket.on("someevent", listener);
// You also want to remove the event listener
// when the component unmounts
return () => {
socket.off("someevent", listener);
// this will prevent any leak from your component
};
}, [modalOpened]);
这将确保在组件挂载时绑定监听器并且
所以我有以下问题,我有一个 socket.on("someevent", someFunction)
,我的问题是 someFunction 中的代码应该只在特定条件下执行,所以:
const [modalOpened, setModalOpened] = useState(false);
const [data, setData] = useState([]);
const handleSetData = (data) => {
!modalOpened && setData(data);
}
socket.on("someevent", (data) => {
handleSetData(data);
});
问题是,一旦创建了该事件侦听器,它就会接受 modalOpened
的当前值并坚持下去,我希望它始终使用当前的实际值,所以如何我应该通过引用传递它吗?
我已经尝试创建另一个函数,但它仍然无法使用它:
const checkModalOpened = () => { return modalOpened }
它仍然坚持它捕获的任何值。
Aaaa,我知道我以前解决过这个问题!!!!
您必须在 useEffect 中设置监听器,否则它会在每次重新渲染时重新创建。
详情在这里:
您应该将事件侦听器移动到 useEffect
函数中。
useEffect(() => {
const listener = (data) => {
if (!modalOpened) {
setData(data);
}
};
socket.on("someevent", listener);
// You also want to remove the event listener
// when the component unmounts
return () => {
socket.off("someevent", listener);
// this will prevent any leak from your component
};
}, [modalOpened]);
这将确保在组件挂载时绑定监听器并且