Tengo 2 useEffects dentro de mi componente con los métodos setTimeout y clearTimeout dentro de ellos. Ambos se actualizan en función de los mismos accesorios y las condiciones dentro de ellos son las mismas, sin embargo, uno está configurado para dispararse cada 3 segundos y el otro debería dispararse cada 1 minuto.
Mi problema es que el que debería actualizarse cada minuto no se activa en absoluto.
Creo que puede reiniciarse cada vez que se actualizan los accesorios (cada 3 segundos cuando me consuelo dentro de la instrucción if , es consolador), pero no estoy seguro de cómo solucionar esto, ya que los accesorios se actualizarán cada vez que se active el primero.
Mi objetivo aquí es
estos son mis efectos de uso:
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]);En lugar de basar mi segundo efecto de uso en los mismos accesorios que el primero, creé un recuento que aumenta cada vez que se llama al primero y el segundo efecto de uso se actualiza cuando se actualiza el recuento:
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]);