Что лучше в response.js: хранить ссылку на тайм-аут как переменную экземпляра (this.timeout) или переменную состояния (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);
}
...
})
или
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);
}
...
})
оба этих подхода работают. Я просто хочу знать причины использовать одно вместо другого.
javascript
reactjs
brendangibson
источник
источник
this.state
напрямую, так какsetState()
последующий вызов может заменить сделанную вами мутацию. Относитесь к ней так,this.state
как если бы она была неизменной».this.timeout = setTimeout(this.openWidget, DELAY);
Ответы:
Я предлагаю хранить его в экземпляре, а не в своем
state
. Всякий раз, когдаstate
обновляется (что должно выполняться только так,setState
как предлагается в комментарии), React вызываетrender
и вносит любые необходимые изменения в реальную DOM.Поскольку значение
timeout
не влияет на рендеринг вашего компонента, он не должен находиться вstate
. Помещение его туда вызовет ненужные вызовыrender
.источник
В дополнение к тому, что сказал @ssorallen, вы также должны не забыть обработать размонтирование компонента перед вызовом handleLeave.
источник