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

170
Vistas
¿Por qué el valor de mi estado no se actualiza al obtener la URL?

Quiero obtener los datos cuando se hace clic en el botón de búsqueda, para eso hice una función, en eso cambié el estado de los datos y luego obtuve los datos. Pero el problema está en el enlace de búsqueda que proporcioné, está tomando el valor inicial de ese estado de datos, no el valor que he cambiado después de hacer clic en el botón de búsqueda. Código:

 <form className="d-flex"> <input onChange={(e) => this.setState({ instant_data: e.target.value }) } className="form-control me-2" type="search" placeholder="Search" aria-label="Search" /> <button className="btn btn-outline-success" type="submit" onClick={this.searchNews} > Search </button> </form>
 constructor() { super(); this.state = { instant_data: "", data: "", search_data: [], }; }
 searchNews = async (e) => { e.preventDefault(); this.setState({ data: this.state.instant_data, }); const link = `https://newsapi.org/v2/everything?q=${this.state.data}&apiKey=API_KEY`; const raw_data = await fetch(link); const data = await raw_data.json(); console.log(data); };
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

De la documentación ;

setState() no muta inmediatamente this.state sino que crea una transición de estado pendiente. Acceder this.state después de llamar a este método puede potencialmente devolver el valor existente. No hay garantía de funcionamiento síncrono de las llamadas a setState y las llamadas pueden agruparse por lotes para mejorar el rendimiento.

Sugerencia -> pasar una función de devolución de llamada:

 this.setState({ data: this.state.instant_data, }, () => { const link = `https://newsapi.org/v2/everything?q=${this.state.data}&apiKey=API_KEY`; const raw_data = await fetch(link); const data = await raw_data.json(); console.log(data); });
about 4 years ago · Juan Pablo Isaza Denunciar

0

Esto se debe a que this.setState no es un cambio inmediato, a veces lleva algo de tiempo configurarlo, por lo que no debe usar this.state.data sino usar this.state.instant_data como:

 const link = `https://newsapi.org/v2/everythingq=${this.state.instant_data}&apiKey=API_KEY`;
about 4 years ago · Juan Pablo Isaza Denunciar

0

Cambie su entrada a:

 <input onChange={(e) => this.setState({ instant_data: e.target.value })} className="form-control me-2" type="search" placeholder="Search" aria-label="Search" value={this.state.instant_data} <--- added this here />

Y cambie su función de searchNews de noticias a:

 searchNews = async (e) => { e.preventDefault() const link = `https://newsapi.org/v2/everything?q=${this.state.instant_data}&apiKey=API_KEY` const raw_data = await fetch(link) const data = await raw_data.json() console.log(data) }

Esencia

 // this is async operation this.setState({ data: this.state.instant_data, });

Entonces terminas haciendo la llamada primero y luego actualizas los data la variable de estado

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