Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

163
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!