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

196
Visualizações
Llamada infinita a UseEffect UseSelector UseDispatch React.js

Usando la acción getContractsFromAPI, obtengo una lista de contratos que están en la API, luego, usando useState y renderContracts, los muestro en la página, pero esto inicia una llamada interminable a useEffect

 const [contracts, setContracts] = useState({}); const contractsList = useAppSelector(({ contractsList }) => contractsList); useEffect(() => { dispatch(getContractsFromAPI()); setContracts(contractsList); }, [contractsList, dispatch]); return ( <div> <h2>Contracts:</h2> <ul className={styles.contractsList}>{renderContracts(contracts)}</ul> </div> );

¿Cómo se puede resolver el problema? Traté de eliminar [contractsList, dispatch] de useEffect, pero luego el procesamiento inicial no ocurre cuando se abre la página

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Ponga despacho(getContractsFromAPI()); en su propio efecto de uso

 useEffect(() => { setContracts(contractsList); }, [contractsList, setContracts]); useEffect(() => { dispatch(getContractsFromAPI()); }, [dispatch, getContractsFromAPI]);

estabas obteniendo un bucle infinito porque getContractsFromAPI aparentemente editó la lista de contratos. La solución fácil es tener getContractsFromAPI en un useEffect que no busca cambios en la lista de contratos.

ACTUALIZACIÓN para cualquiera que se tope con esta respuesta: el usuario cambió su pregunta, agregando más contexto entre el momento en que publicó su pregunta y el momento en que publiqué mi respuesta. Mi respuesta sigue siendo válida, pero para el caso de uso específico de @yourBadApple, la respuesta de AKX es más relevante

about 4 years ago · Juan Pablo Isaza Relatório

0

Si realmente no necesita una copia superficial de los contratos en el estado local de su componente, deshágase del estado local y utilícelos desde el selector.

 function ContractsComponent() { const contracts = useAppSelector(({ contractsList }) => contractsList); // Get contracts from API on mount useEffect(() => { dispatch(getContractsFromAPI()); }, [dispatch]); if (!contracts) return <>Loading...</>; return ( <div> <h2>Contracts:</h2> <ul className={styles.contractsList}>{renderContracts(contracts)}</ul> </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