[英]Api call with timer not firing when props are updating faster than timer is set for
我的组件中有 2 个 useEffects,其中包含 setTimeout 和 clearTimeout 方法。 它们都基于相同的道具进行更新,并且它们内部的条件相同,但是设置为每 3 秒触发一次,而另一个应每 1 分钟触发一次。
我的问题是应该每分钟更新一次的问题根本没有触发。
我认为它可能会在每次道具更新时重置(当我在if
语句中进行控制台时,它正在安慰时每 3 秒一次)但我不确定如何解决这个问题,因为每次触发第一个道具时道具都会更新。
我的目标是
这些是我的使用效果:
useEffect(() => {
if(!providerData?.providerAvailable ) {
sendMessage({
code: 'NO_PROVIDER_AVAILABLE',
value: 'No provider currently available',
});
const timerId = window.setTimeout(() => providerRefetch(), 3000);
return () => window.clearTimeout(timerId);
} else {
return;
}
}, [providerData]);
// send No provider event every minute
useEffect(() => {
if ( !providerData?.providerAvailable ) {
const eventId = window.setTimeout(() => sendEvent(), 60000, {
key: 'NO_PROVIDER_AVAILABLE',
description: 'No provider currently available',
});
return () => window.clearTimeout(eventId);
} else {
return;
}
}, [providerData]);
我的第二个 useEffect 不是基于与第一个相同的道具,而是创建了一个计数,每次调用第一个时都会递增,而当计数更新时,第二个 useEffect 会更新:
const [callCount, setCallCount] = useState(0);
useEffect(() => {
if (
providerError ||
(!providerData?.providerAvailable && providerData?.providerState !== 'engaged')
) {
if (callCount < 21) {
let count = callCount + 1;
setCallCount(count);
} else {
setCallCount(0);
}
sendMessage({
type: 'EVENT',
code: 'NO_PROVIDER_AVAILABLE',
value: 'No provider currently available',
});
const timerId = window.setTimeout(() => providerRefetch(), 3000);
return () => window.clearTimeout(timerId);
} else {
return;
}
}, [providerData, providerRefetch, providerError]);
// send No provider event every minute
useEffect(() => {
if (callCount === 2) {
sendEvent({
key: 'NO_PROVIDER_AVAILABLE',
description: 'No provider currently available',
})
} else {
return;
}
}, [callCount]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.