gpt4 book ai didi

javascript - 单击按钮时无法读取 null 的属性 'setState'

转载 作者:行者123 更新时间:2023-11-28 14:29:36 24 4
gpt4 key购买 nike

我正在开发一个reactjs应用程序,并且在访问updateVert函数内的状态时遇到了这个问题。当我单击“播放”按钮时,将调用 actionButton,并从 actionButton 内部调用 updateVert。

下面是我的代码片段

updateVert() {

console.log("inside upver")
if(play) {
cancelAnimationFrame(this.updateVert);
return;
}

this.setState({xPos: this.state.xPos + 1}, ()=>{
if(this.state.xPos >= w) {
// stop animation...
this.setState({xPos:0, playing:false});
}
ctx.clearRect(0, 0, w, h);

// draw new one...
ctx.beginPath();
ctx.strokeStyle = "#19f";
ctx.lineWidth = 2;
ctx.moveTo(this.state.xPos, 0);
ctx.lineTo(this.state.xPos, 200);
ctx.stroke();

if(this.state.playing) {
console.log("yes true")
requestAnimationFrame(this.updateVert)
};
})
// reset rectangle content to erase previous line...
}

actionButton(){
if(this.state.playing) {
// pause...
this.setState({playing:false},()=>{
console.log(this.state.playing)
})
}
else {
this.setState({playing:!this.state.playing},()=>{
console.log(this.state.playing)
this.updateVert();
})

}
}

render() {
return (
<div>
<div className="App">
<canvas id="DemoCanvas" width="500" height="200"></canvas>
</div>
<button onClick={this.actionButton.bind(this)}>{this.state.playing ? "Stop":"Play"}</button>
</div>


);
}

当我单击按钮(播放/暂停)时,出现错误消息

TypeError: Cannot read property 'setState' of null
updateVert
src/App.js:45
42 | return;
43 | }
44 |
> 45 | this.setState({xPos: this.state.xPos + 1}, ()=>{
46 | if(this.state.xPos >= w) {
47 | // stop animation...
48 | this.setState({xPos:0, playing:false});

我已经正确引用了 updateVert 函数。我做错了什么?

最佳答案

您缺少绑定(bind)上下文this:

actionButton(){ Hook 中,您调用的是 this.updateVert(),它没有与 this 绑定(bind)。因此将其绑定(bind)在构造函数内:

this.updateVert.bind(this)

关于javascript - 单击按钮时无法读取 null 的属性 'setState',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51999571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com