En react.js, ¿es mejor almacenar una referencia de tiempo de espera como una variable de instancia (this.timeout) o una variable de estado (this.state.timeout)?
React.createClass({
handleEnter: function () {
// Open a new one after a delay
var self = this;
this.timeout = setTimeout(function () {
self.openWidget();
}, DELAY);
},
handleLeave: function () {
// Clear the timeout for opening the widget
clearTimeout(this.timeout);
}
...
})
o
React.createClass({
handleEnter: function () {
// Open a new one after a delay
var self = this;
this.state.timeout = setTimeout(function () {
self.openWidget();
}, DELAY);
},
handleLeave: function () {
// Clear the timeout for opening the widget
clearTimeout(this.state.timeout);
}
...
})
ambos enfoques funcionan. Solo quiero saber las razones para usar uno sobre el otro.
javascript
reactjs
brendangibson
fuente
fuente
this.state
directamente, ya que llamarsetState()
después puede reemplazar la mutación que hiciste. Trátalathis.state
como si fuera inmutable".this.timeout = setTimeout(this.openWidget, DELAY);
Respuestas:
Sugiero almacenarlo en la instancia pero no en su
state
. Siempre questate
se actualiza (lo que solo debe hacersesetState
como se sugiere en un comentario), React llamarender
y realiza los cambios necesarios en el DOM real.Debido a que el valor de
timeout
no tiene ningún efecto en la representación de su componente, no debería vivir enstate
. Ponerlo allí causaría llamadas innecesarias arender
.fuente
Además de lo que dijo @ssorallen, también debe recordar manejar el desmontaje del componente antes de que se llame a handleLeave.
fuente