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

145
Views
Pérdida de valor de estado después de que finaliza la función

Soy nuevo en el concepto de reacción, no entiendo por qué pierdo el valor del estado después de .then() Pierdo el valor del estado ISPList pero configuré el estado :( agradezco cualquier ayuda.

 export default class Cartable extends React.Component<IMainCartableProps, ICartableState> { constructor(props: IMainCartableProps, state: ICartableState) { super(props) this.state = { status: "Ready", ISiteCollections: [], ISPLists:[], ISPTaskItems:[], } } public _getListOfLists(context: WebPartContext): Promise<ISPLists[]> { this.state.ISiteCollections.map(async (siteCollection:any)=>{ let url = siteCollection.SPSiteUrl + `/forms/_api/web/lists? $filter=Hidden eq false and BaseTemplate eq 107`; //console.log(url) let config: SPHttpClientConfiguration = new SPHttpClientConfiguration({ defaultODataVersion: ODataVersion.v3}) new Promise<ISPLists[]>( async (resolve, reject)=>{ this.props.context.spHttpClient.get(url, config, { headers: { Accept: "application/json;odata=minimalmetadata;charset=utf-8" }}) .then((response: SPHttpClientResponse) => { //console.log(response.status) if(response.status==200){ response.json().then((results: any) => { //let resultsList = results.PrimaryQueryResult.RelevantResults.Table.Rows; console.log(results) results.value.map((result:any)=>{ TaskLists.push({ title: result.Title, Id:result.Id }) }) //console.log(TaskLists.length) //this.setState({ ISPLists:TaskLists }) //console.log(this.state.ISPLists.length) //resolve(TaskLists); this.setState({ISPLists:TaskLists}) //this.setState({ ISPLists:TaskLists}) //console.log(this.state.ISPLists[1].title) //this._getTaskItems() }) } // return response.json(); console.log(TaskLists.length) }) }) }) console.log(TaskLists.length) console.log("Hereeeee") this.state.ISPLists.map(SPList=>{ console.log(SPList.title) }) return }
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Hay muchas cosas mal con este código.

  1. Está utilizando un método de mapa, no devuelve nada y agrega operaciones asíncronas
  2. this.setState reemplaza el estado existente, no fusiona su nuevo estado con el estado existente

Solución:

  1. Si solo necesita recorrer ISiteCollections y enviar solicitudes de API, simplemente use forEach o for loop para recorrer la matriz
  2. Para fusionar su nuevo estado con el estado existente, use el operador de propagación es6. this.setState({ispLists:[...this.state.ispLists , ...TaskLists ]})
about 4 years ago · Juan Pablo Isaza Report

0

No estoy seguro de su problema, ya que no estoy trabajando con React durante mucho tiempo, pero en cuanto a la depuración de esto: 1: Cree un archivo console.log para ISPLists justo después de setState para asegurarse de que el valor se haya configurado correctamente. 2: asegúrese de recorrerlo después de setState (ya que no encontré ningún async/await en su código).

Para una forma más limpia: cree una función separada para el valor setState ISPList para tener más flexibilidad y facilitar la depuración. Esto realmente podría ayudar a depurarlo.

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!