ReactJS:this.setState 不是函数?
ReactJS : this.setState is not a function?
我是 ReactJS 新手,遇到错误 "this.setState is not a function"。
constructor() {
super();
this.state = {
visible: false,
navLinesShow: true
};
this.navOpen = this.navOpen.bind(this)
}
navOpen() {
this.setState({
navStatus: "navShow",
navLinesShow: false
});
if ( this.state.visible === false) {
setTimeout(function (){
this.setState({
visible: true
});
}, 3000);
}
我已将 this.navOpen = this.navOpen.bind(this) 添加到构造函数。所以我猜问题出在 setTimeout 函数上。
有什么可能的解决方法?
谢谢。
是的,问题是 setTimeout 函数中的 setTimeout "this" 指的是函数本身:所以解决方案是典型的 var that = this
:
navOpen() {
this.setState({
navStatus: "navShow",
navLinesShow: false
});
if ( this.state.visible === false) {
var that = this;
setTimeout(function (){
that.setState({
visible: true
});
}, 3000);
}
这是因为 this
由于运行时绑定而没有正确的值。您需要使用词法绑定。最好的解决方案是使用 ES6
箭头函数 () => {}
提供此值的词法绑定。即使使用 setTimeout()
,它的词法绑定也会修复你得到的错误
constructor() {
super();
this.state = {
visible: false,
navLinesShow: true
};
}
navOpen = () => {
this.setState({
navStatus: "navShow",
navLinesShow: false
});
if ( this.state.visible === false) {
setTimeout(() => {
this.setState({
visible: true
});
}, 3000);
}
}
除了@pinturic 的解决方案之外的另一种解决方案是使用 ES6 箭头函数。如果您使用 ES6/Babel 等,您可以使用箭头函数绑定到词法 this
.
navOpen() {
this.setState({
navStatus: "navShow",
navLinesShow: false
});
if (!this.state.visible) {
setTimeout(() => this.setState({visible: true}), 3000);
}
}
我是 ReactJS 新手,遇到错误 "this.setState is not a function"。
constructor() {
super();
this.state = {
visible: false,
navLinesShow: true
};
this.navOpen = this.navOpen.bind(this)
}
navOpen() {
this.setState({
navStatus: "navShow",
navLinesShow: false
});
if ( this.state.visible === false) {
setTimeout(function (){
this.setState({
visible: true
});
}, 3000);
}
我已将 this.navOpen = this.navOpen.bind(this) 添加到构造函数。所以我猜问题出在 setTimeout 函数上。
有什么可能的解决方法?
谢谢。
是的,问题是 setTimeout 函数中的 setTimeout "this" 指的是函数本身:所以解决方案是典型的 var that = this
:
navOpen() {
this.setState({
navStatus: "navShow",
navLinesShow: false
});
if ( this.state.visible === false) {
var that = this;
setTimeout(function (){
that.setState({
visible: true
});
}, 3000);
}
这是因为 this
由于运行时绑定而没有正确的值。您需要使用词法绑定。最好的解决方案是使用 ES6
箭头函数 () => {}
提供此值的词法绑定。即使使用 setTimeout()
,它的词法绑定也会修复你得到的错误
constructor() {
super();
this.state = {
visible: false,
navLinesShow: true
};
}
navOpen = () => {
this.setState({
navStatus: "navShow",
navLinesShow: false
});
if ( this.state.visible === false) {
setTimeout(() => {
this.setState({
visible: true
});
}, 3000);
}
}
除了@pinturic 的解决方案之外的另一种解决方案是使用 ES6 箭头函数。如果您使用 ES6/Babel 等,您可以使用箭头函数绑定到词法 this
.
navOpen() {
this.setState({
navStatus: "navShow",
navLinesShow: false
});
if (!this.state.visible) {
setTimeout(() => this.setState({visible: true}), 3000);
}
}