Czy w respond.js lepiej jest przechowywać odwołanie do limitu czasu jako zmienną instancji (this.timeout) czy zmienną stanu (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);
}
...
})
lub
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);
}
...
})
oba te podejścia działają. Chcę tylko poznać powody używania jednego nad drugim.
javascript
reactjs
brendangibson
źródło
źródło
this.state
bezpośrednio, ponieważsetState()
późniejsze wywołanie może zastąpić dokonaną przez Ciebie mutację. Traktujthis.state
tak, jakby była niezmienna”.this.timeout = setTimeout(this.openWidget, DELAY);
Odpowiedzi:
Sugeruję przechowywanie go w instancji, ale nie w jego
state
. Za każdym razem, gdystate
jest aktualizowany (co powinno być zrobione tylkosetState
zgodnie z sugestią w komentarzu), React wywołujerender
i wprowadza niezbędne zmiany w prawdziwym DOM.Ponieważ wartość
timeout
nie ma wpływu na renderowanie komponentu, nie powinna istniećstate
. Umieszczenie go tam spowodowałoby niepotrzebne wezwaniarender
.źródło
Oprócz tego, co powiedział @ssorallen, powinieneś również pamiętać o odmontowaniu komponentu przed wywołaniem twojego handleLeave.
źródło