更新状态的功能:
animate() {
setInterval(function(){
setTimeout( this.setState({
a: '123'
}), 1000);
}, 4000);
}
该方法称为:
componentDidMount() {
this.animate();
}
错误:
Uncaught TypeError: this.setState is not a function
然后下一个代码尝试了:
animate() {
setInterval(function(){
setTimeout( () => {this.setState({
a: '123'
})}, 1000);
}, 4000);
}
下一个错误是:
Uncaught TypeError: _this2.setState is not a function
答案 0 :(得分:3)
问题源于您对setInterval
的定义。
执行setInterval(function() {...})
时,this
关键字不再绑定到React组件,而是绑定到由于引入新范围而在其中调用的函数。
您可以将其切换为:
animate() {
const self = this
setInterval(function() {
setTimeout(() => self.setState({ a: '123' }), 1000)
}, 4000)
}
这种方式self
在引入新范围之前分配给this
的React组件值,或者您可以使用所有箭头函数来保留引用该组件的this
关键字:
animate() {
setInterval(() => {
setTimeout(() => this.setState({ a: '123' }), 1000)
}, 4000)
}
答案 1 :(得分:0)
虽然m_callens提交的答案是正确的,但我也会使用bind
为那些使用pre-ES6 JavaScript的人添加这种可能性。
animate() {
setInterval((function(){
setTimeout((function() {this.setState({
a: '123'
})}).bind(this), 1000);
}).bind(this), 4000);
}