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

138
Visualizações
Reaccionar uso simpleEfecto bucle infinito

No entiendo por qué este código es un bucle infinito. Esto es porque actualizo mi estado en otra condición. Pero me gustaría actualizar una serie de direcciones URL cuando obtenga una nueva respuesta de API.

 import React, { useState, useEffect } from 'react'; function getShortenUrl() { const [urls, setUrls] = useState([]) const [error, setError] = useState(null); const [items, setItems] = useState({}); useEffect(() => { fetch("https://api.shrtco.de/v2/shorten?url=https://stackoverflow.com/questions/37435334/correct-way-to-push-into-state-array") .then(res => res.json()) .then( (result) => { setItems(result); }, (error) => { setError(error); } ) }, []) if (error) { return <div>Error : {error.message}</div>; } else if (!items.result) { return <div>Loading...</div>; console.log("no item"); } else { setUrls([urls, items]); console.log("items", items); console.log("urls", urls); return <ul> {items.result.short_link}</ul>; } } export default getShortenUrl;

Estoy un poco perdido cuando se trata de estado en realidad. No entiendo cómo puedo crear una matriz de URL y poder usarla en otros componentes.

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

0

Puede que tengas algunos errores aquí.

 .then( (result) => { setItems(result); }, (error) => { setError(error); } )

cambiarlo en

 .then((result) => { setItems(result); setUrls([...urls, result]) }) .catch((error) => { setError(error); })

Y también elimine la línea setUrls([urls, items]);

about 4 years ago · Juan Pablo Isaza Relatório

0

Intente usar una representación condicional en lugar de una declaración if else :

 import React, { useState, useEffect } from 'react'; function getShortenUrl() { const [urls, setUrls] = useState([]) const [error, setError] = useState(null); const [items, setItems] = useState({}); useEffect(() => { fetch("https://api.shrtco.de/v2/shorten?url=https://stackoverflow.com/questions/37435334/correct-way-to-push-into-state-array") .then(res => res.json()) .then( (result) => { setItems(result); }, (error) => { setError(error); } ) }, []) return ( <> {error&& <div>Error : {error.message}</div>} {!items.result && <div>Loading...</div> } {items.result && <ul> {items.result.short_link}</ul>} </> ) } export default getShortenUrl;
about 4 years ago · Juan Pablo Isaza Relatório

0

Si es nuevo en reaccionar, hacemos el estado de carga para la recuperación de la llamada API y está configurando el estado en otro lugar y cuando el estado actualiza el componente se vuelve a procesar, por lo que en cada componente se vuelve a procesar, está actualizando el estado que está causando un bucle infinito. Prueba esto

 import React, { useState, useEffect } from 'react'; function getShortenUrl() { const [urls, setUrls] = useState([]) const [error, setError] = useState(null); // const [items, setItems] = useState({}); // remove it because you are using urls and items state for same purposes const [loading,setLoading]=useState(false); useEffect(() => { setLoading(true); fetch("https://api.shrtco.de/v2/shorten?url=https://stackoverflow.com/questions/37435334/correct-way-to-push-into-state-array") .then(res => res.json()) .then( (result) => { // setItems(result); // remove it setUrls(result); setLoading(false); }, (error) => { setError(error); setLoading(false); } ) }, []) if(loading){ return <div>Loading...</div>; } if (error) { return <div>Error : {error.message}</div>; } else { return <ul> {urls?.result?.short_link}</ul>; } } export default getShortenUrl;
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