¿Hay alguna solución mejor para esto? Cuando se activa el primer useEffect, solo getAccountDetailsData() tendrá éxito, getErrorLogInfo() fallará porque store.AccountDetails.ID es nulo en esa etapa. getAccountDetailsData() obtendrá ese valor.
Ahora el efecto de uso no se dispara de nuevo, sino que espera 60 segundos para disparar el segundo que se dispara cada minuto. y entonces todo funciona bien.
El problema es que tengo que esperar 1 minuto antes de que getErrorLogInfo() funcione. si pongo una lista de dependencias [] en el primer useEffect(), se activará en bucles. No tendré que esperar 1 minuto, pero generará un error 429
useEffect(() => { dispatch(getAccountDetailsData(user.EmailAddress)); // we call this to get AccountDetails.ID dispatch(getErrorLogInfo(store.AccountDetails.ID)); // will not work missing AccountDetails.ID }, []); // I can put dependency list [] but will be endless loop //now I have to wait 60 seconds to try again useEffect(() => { dispatch(getAccountDetailsData(user.EmailAddress)); works dispatch(getErrorLogInfo(store.AccountDetails.ID)); works }, 60000);// refresh data after every 60 seconds return () => clearInterval(interval); }, [store]);Deberá colocar una declaración de protección en su devolución de llamada useEffect para evitar que intente getErrorLogInfo antes de que se configure store.AccountDetails.ID .
También se divide para usar dos declaraciones useEffect ya que tendrán diferentes dependencias:
useEffect(() => { if (user?.EmailAddress) // checks if it exists before running the dispatch dispatch(getAccountDetailsData(user.EmailAddress)); }, [user?.EmailAddress]) // gets called once upon mount and if `user.EmailAddress` changes useEffect(() => { if (store?.AccountDetails?.ID) // checks if it exists before running the dispatch dispatch(getErrorLogInfo(store.AccountDetails.ID)) }, [store?.AccountDetails?.ID]) // gets called once upon mount and if `user.EmailAddress` changessi desea obtener datos según los datos de la tienda, puede hacerlo con 2 useEffect como este:
useEffect(() => { dispatch(getAccountDetailsData(user.EmailAddress)); }, []) useEffect(()=>{ if(store.AccountDetails){ dispatch(getErrorLogInfo(store.AccountDetails.ID)); } },[store.AccountDetails])