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.statedirectamente, ya que llamarsetState()después puede reemplazar la mutación que hiciste. Trátalathis.statecomo si fuera inmutable".this.timeout = setTimeout(this.openWidget, DELAY);Respuestas:
Sugiero almacenarlo en la instancia pero no en su
state. Siempre questatese actualiza (lo que solo debe hacersesetStatecomo se sugiere en un comentario), React llamarendery realiza los cambios necesarios en el DOM real.Debido a que el valor de
timeoutno 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