Sí lo hay, ya que setStatefunciona de alguna asynchronousmanera. Eso significa que después de llamar a setStatela this.statevariable no se cambia de inmediato. así que si desea realizar una acción inmediatamente después de establecer el estado en una variable de estado y luego devolver un resultado, una devolución de llamada será útil
Considere el siguiente ejemplo
....
changeTitle: function changeTitle (event) {
this.setState({ title: event.target.value });
this.validateTitle();
},
validateTitle: function validateTitle () {
if (this.state.title.length === 0) {
this.setState({ titleError: "Title can't be blank" });
}
},
....
Es posible que el código anterior no funcione como se esperaba, ya que la titlevariable puede no haber mutado antes de que se realice la validación. Ahora puede preguntarse si podemos realizar la validación en la render()función en sí, pero sería mejor y más limpio si podemos manejar esto en la función changeTitle, ya que eso haría que su código sea más organizado y comprensible
En este caso, la devolución de llamada es útil
....
changeTitle: function changeTitle (event) {
this.setState({ title: event.target.value }, function() {
this.validateTitle();
});
},
validateTitle: function validateTitle () {
if (this.state.title.length === 0) {
this.setState({ titleError: "Title can't be blank" });
}
},
....
Otro ejemplo será cuando quieras dispatchy acción cuando el estado haya cambiado. querrá hacerlo en una devolución de llamada y no en la render()forma en que se llamará cada vez que se produzca la devolución y, por lo tanto, muchos de estos escenarios son posibles donde necesitará una devolución de llamada.
Otro caso es un API Call
Puede surgir un caso cuando necesita hacer una llamada a la API en función de un cambio de estado particular, si lo hace en el método de representación, se llamará en cada onStatecambio de representación o porque alguna Prop se transfirió a la Child Componentmodificación.
En este caso, querrá usar a setState callbackpara pasar el valor de estado actualizado a la llamada API
....
changeTitle: function (event) {
this.setState({ title: event.target.value }, () => this.APICallFunction());
},
APICallFunction: function () {
// Call API with the updated value
}
....