Sí lo hay, ya que setState
funciona de alguna asynchronous
manera. Eso significa que después de llamar a setState
la this.state
variable 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 title
variable 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 dispatch
y 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 onState
cambio de representación o porque alguna Prop se transfirió a la Child Component
modificación.
En este caso, querrá usar a setState callback
para 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
}
....