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

107
Vistas
Uso de enlaces API personalizados con términos de búsqueda actualizados

Me gustaría usar un enlace de solicitud de API personalizado como ese

 // hooks.js import { useState, useEffect } from 'react'; import api from '../utils/api'; function useAPI(fn, payload) { const [state, setState] = useState({ loading: false, data: null, error: null, }); const callAPI = async () => { const setAPIState = update => setState({ ...state, ...update }); try { setAPIState({ loading: true }); const data = await fn(payload); setAPIState({ data, loading: false }); } catch (error) { setAPIState({ error, loading: false }); } }; useEffect(() => { callAPI(); }, [fn, payload]); return state; } export const useFetchTransactions = payload => { const fetchTransactions = api.fetchTransactions; return useAPI(fetchTransactions, payload); };

y llamarlo dentro de mi componente React así:

 // Component.jsx import { useState } from 'react'; import { useFetchTransactions } from '../hooks.js'; export default const Component = () => { const [id, setID] = useState(''); const [date, setDate] = useState('12/13/21'); const { loading, data, error } = useFetchTransactions({ id, date }); return ( <div>{data.map...}</div> ) }

Sin embargo, esto se ve mal. Creo que useFetchTransactions debería vivir dentro de un useEffect, de modo que el componente se convierta en algo como:

 // Updated Component.jsx import { useState, useEffect } from 'react'; import { useFetchTransactions } from '../hooks.js'; export default const Component = () => { const [id, setID] = useState(''); const [date, setDate] = useState('12/13/21'); const [apiState, setApiState] = useState({ data: null, error: null, loading: false }) useEffect(() => { const result = useFetchTransactions({ id, date }); setState({ ...apiState, ...result }); }, [date, id]) return ( <div>{apiState.data.map...}</div> ) }

Pero lo anterior se siente engorroso y redundante. ¿Puede alguien por favor prestar algún conocimiento sobre esto? ¡Gracias!

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

0

Puedes hacerlo así

 function useAPI(fn) { const [state, setState] = useState({ loading: false, data: null, error: null, }); const callAPI = async (payload) => { const setAPIState = update => setState({ ...state, ...update }); try { setAPIState({ loading: true }); const data = await fn(payload); setAPIState({ data, loading: false }); } catch (error) { setAPIState({ error, loading: false }); } }; return {state, callAPI}; } export const useFetchTransactions = () => { const fetchTransactions = api.fetchTransactions; return useAPI(fetchTransactions); };

Y luego en tu componente

import { useState } from 'react'; 
import { useFetchTransactions } from '../hooks.js'; 

export default const Component = () => { 
  const [id, setID] = useState(''); 
  const [date, setDate] = useState('12/13/21'); 
  const { callAPI, loading, data, error } = useFetchTransactions(); useEffect(() => { callAPI({ id, date }) }, [date, id]) 
    return ( 
        <div>{data.map(callAPI)}</div>
 ) 
}
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