Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

129
Vistas
¿Reutilizar mi gancho personalizado `useFetch` en React?

Creé un gancho personalizado useFetch simple que me permite llamar a cualquier URL que desee:

 import React, { useState, useEffect } from 'react'; export default function useFetch(url) { console.log(url) const [data, setData] = useState([]); useEffect(() => { fetch(url) .then((response) => { if (response.ok) return response.json(); setData([]); }) .then((data) => { setData(data)}) .catch((err) => { console.error(err); setData([]); }); }, [url]); return { data} ; }

En mi componente principal, estoy cargando una lista estática de elementos (a través de useEffect con [] porque es estático)

Actualmente lo hago a través de:

 export function Courses() { const [langs, setLangs] = useState([]); useEffect(() => { getData(config.url).then((f) => setLangs(f)); }, []); ...

Donde getData es:

 export function getData(uri) { return fetch(uri).then(response => response.json() ); }

El problema es que no puedo (no sé cómo), puedo usar mi useFetch aquí porque no puede estar dentro de useEffect , y es por eso que he creado el método getData adicional .

pd-

En otro componente de "details" uso useFetch perfectamente bien:

 export default function Details({ langId }) { const { data: teachers } = useFetch(`${config.url}/${langId}`); ...

El problema está solo en el componente principal donde no quiero buscar manualmente. Quiero usar mi useFetch . Cómo puedo hacer eso ?

Quiero que Courses cargue la lista estática solo una vez a través useFetch

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Una opción posible es almacenar en caché la respuesta de búsqueda (no probé el código)

 import React, { useState, useEffect } from 'react'; const cache = {}; export default function useFetch(url, useCache=false) { console.log(url) const [data, setData] = useState([]); useEffect(() => { if (useCache && cache[url]) { setData(cache[url]); } else { fetch(url) .then((response) => { if (response.ok) { const responseData = await response.json(); if (useCache) cache[url] = responseData; return responseData; } setData([]); }) .then((data) => { setData(data)}) .catch((err) => { console.error(err); setData([]); }); } }, [url]); return { data} ; }

Puede usar useRef si desea mantener los ganchos como una función pura

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda