Principalmente uso SWR para obtener datos, sin embargo, tengo una situación en la que necesito actualizar los datos. El problema es que necesito un indicador de que esta solicitud está en curso, algo así como el indicador isLoading . En los documentos hay una sugerencia para usar
const isLoading = !data && !error; Pero, por supuesto, al actualizar (mutar) los data aún existen, por lo que este indicador siempre es false . Lo mismo con la bandera isValidating :
const { isValidating } = useSWR(...); Este indicador NO cambia cuando la mutación está en curso, sino solo cuando está lista y se ha iniciado la solicitud GET .
¿Hay alguna forma de saber si mi PUT se está cargando? Nota : no quiero usar ningún campo en el estado porque no se compartirá como lo son los datos SWR. ¿Quizás estoy haciendo algo mal con mi código SWR?
const fetcher = (url, payload) => axios.post(url, payload).then((res) => res); // ^^^^^ its POST but it only fetches data const updater = (url, payload) => axios.put(url, payload).then((res) => res); // ^^^^^ this one UPDATES the data const useHook = () => { const { data, error, mutate, isValidating } = useSWR([getURL, payload], fetcher); const { mutate: update } = useSWRConfig(); const updateData = () => { update(getURL, updater(putURL, payload)); // update data mutate(); // refetch data after update }; return { data, updateData, isValidating, // true only when fetching data isLoading: !data && !error, // true only when fetching data }Hmm basado en eso: https://swr.vercel.app/docs/conditional-fetching
Debería funcionar que el estado "se está cargando" es cuando su updater se evalúa como un valor "falso".
¡RESTO! No sé reaccionar swr solo busqué documentos - demasiado tiempo al final del fin de semana: D
Al menos espero empezar la discusión :D