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 }Hay muchas cosas mal con este código.
this.setState reemplaza el estado existente, no fusiona su nuevo estado con el estado existenteSolución:
ISiteCollections y enviar solicitudes de API, simplemente use forEach o for loop para recorrer la matrizthis.setState({ispLists:[...this.state.ispLists , ...TaskLists ]})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.