Di react.js, apakah lebih baik menyimpan referensi batas waktu sebagai variabel instan (this.timeout) atau variabel status (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);
}
...
})
atau
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);
}
...
})
kedua pendekatan ini berhasil. Saya hanya ingin mengetahui alasan penggunaan salah satu alasan tersebut.
javascript
reactjs
brendangibson
sumber
sumber
this.state
secara langsung, karena meneleponsetState()
setelahnya dapat menggantikan mutasi yang Anda buat. Perlakukanthis.state
seolah-olah mutasi itu tidak berubah."this.timeout = setTimeout(this.openWidget, DELAY);
Jawaban:
Saya sarankan menyimpannya di instance tetapi tidak di dalamnya
state
. Kapanstate
pun diperbarui (yang seharusnya hanya dilakukan olehsetState
seperti yang disarankan dalam komentar), React memanggilrender
dan membuat perubahan yang diperlukan pada DOM asli.Karena nilai
timeout
tidak berpengaruh pada rendering komponen Anda, seharusnya tidak adastate
. Menempatkannya di sana akan menyebabkan panggilan yang tidak perlurender
.sumber
Selain apa yang dikatakan @ssorallen, Anda juga harus ingat untuk menangani pelepasan komponen sebelum handleLeave dipanggil.
sumber