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

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

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 Denunciar

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