Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

106
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda