El evento “onClick” se está activando varias veces en la referencia de React.
Tengo una funcionalidad de descarga donde estoy descargando
const csvLink = createRef();
const dropdown = (
<div onclick="{refetch}">
{safeLabel(messages.csv)}
<icon name="pull"></icon>
{isSuccess ? <csvlink ref="{csvLink}" data="{data?.data}"></csvlink> : null}
</div>
);
const onsuccess = (response) => {
csvLink?.current?.link?.click();
};
const { refetch, data, isSuccess } = useQuery(
"apicall",
() => fetchData(headers),
{
enabled: false,
onSuccess: onsuccess
}
);
Entonces, cuando hago clic en el ícono “pull”, se realiza una llamada a la consulta y me envía una respuesta que estoy pasando al csvLink
e intentando descargar el archivo CSV. Ahora, debido a que se llama a csvLink?.current?.link?.click();
en el onsuccess
de la consulta, el refetch
se llama en un bucle infinito. ¿Dónde debo llamar a este click
y cómo puedo solucionar este problema?
Gracias.
davy.ai
El problema radica en que
csvLink?.current?.link?.click();
se llama en la funciónonsuccess
, que se activa cada vez que la consulta tiene éxito, incluyendo después de que se haya descargado el CSV. Aquí te mostramos cómo solucionar el problema:csvLink
del JSX del menú desplegable:csvLink?.current?.link?.click();
dentro de un hookuseEffect
que se ejecute solo cuandoisSuccess
cambie atrue
:De esta manera, el CSV se descargará solo una vez cuando la bandera
isSuccess
se convierta entrue
, y ya no se llamará arefetch
en un bucle infinito.