Dans react.js, est-il préférable de stocker une référence de délai d'expiration en tant que variable d'instance (this.timeout) ou variable d'état (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);
}
...
})
ou
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);
}
...
})
ces deux approches fonctionnent. Je veux juste connaître les raisons de l'utilisation de l'un par rapport à l'autre.
javascript
reactjs
Brendangibson
la source
la source
this.state
directement, car un appelsetState()
après peut remplacer la mutation que vous avez faite. Traitezthis.state
comme si elle était immuable."this.timeout = setTimeout(this.openWidget, DELAY);
Réponses:
Je suggère de le stocker sur l'instance mais pas dans son
state
. À chaquestate
mise à jour (ce qui ne devrait être faitsetState
que comme suggéré dans un commentaire), React appellerender
et apporte les modifications nécessaires au vrai DOM.Étant donné que la valeur de
timeout
n'a aucun effet sur le rendu de votre composant, il ne devrait pas vivrestate
. Le mettre là entraînerait des appels inutilesrender
.la source
En plus de ce que @ssorallen a dit, vous devez également vous rappeler de gérer le démontage du composant avant que votre handleLeave ne soit appelé.
la source