Necesito devolver el valor checkSuggestionList de la función a this.state.validSearchParentInput . La función checkSuggestionList devuelve el valor correcto pero no se pasa a this.state.validSearchParentInput . Creo que setState establece el valor antes de que finalice la función checkSuggestionList .
checkSuggestionList = (newValue) => { for (let i = 0; i < nodes.length; i++ ) { let node = nodes[i].name console.log('node: ' , node) if (node.toLowerCase() === newValue.toLowerCase()) { console.log('did find case') return true } else { console.log('didn\'t find case') } return false } } searchParents__onChange = (event, { newValue, method }) => { this.setState({ validSearchParentInput: this.checkSuggestionList(newValue), searchParentsValue: newValue }) this.checkProgress() }No se garantiza que la función setState de un componente React sea síncrona , pero se puede ejecutar de forma asíncrona por motivos de rendimiento.
Es probable que esté leyendo el estado antes de que se haya aplicado el cambio.
Para resolver esto, puede utilizar el segundo parámetro de setState , que toma una función de devolución de llamada que se ejecuta después de que se realizó la transición de estado:
this.setState({ validSearchParentInput: this.checkSuggestionList(newValue), searchParentsValue: newValue }, function() { this.checkProgress() })Las acciones de setState son asíncronas. Esto se explica en la documentación de setState. (Para referencia: https://facebook.github.io/react/docs/react-component.html#setstate )
setState() no muta inmediatamente this.state sino que crea una transición de estado pendiente. Acceder a 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.