Ответ 1
В первом примере this
выходит за пределы области действия при срабатывании функции обратного вызова. Один из способов решения этой проблемы - использовать переменную:
componentDidMount: function() {
var self = this;
setInterval(function() {
console.log(self.state);
}, 3000);
}
Проблема с вашей второй попыткой заключается в том, что вы вызываете функцию немедленно и передаете результат выполнения функции setInterval
. Вы должны передать эту функцию, соблюдая привязку this
:
componentDidMount: function() {
setInterval(this.displayState.bind(this), 3000);
}
Чтобы пояснить, разница между этим подходом и вторым примером в вашем вопросе заключается в том, что здесь функция передается в setInterval
(потому что function.bind()
возвращает функцию).
Поскольку вы используете React.createClass
, нет необходимости управлять привязкой this
самостоятельно, из-за autobind. Это означает, что вы можете просто передать эту функцию, а this
будет такой же, как в исходном контексте:
componentDidMount: function() {
setInterval(this.displayState, 3000);
}
Конечно, наиболее подходящий подход зависит от того, предпочитаете ли вы использовать анонимную функцию или нет.