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

135
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 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