javascript - SetState 未定义
问题描述
可能会做一些愚蠢的事情,但如果有人能帮忙的话。我认为这是未定义的。所以我试图使用 setState 并得到以下错误。
第 20 行未捕获的类型错误:无法读取未定义的属性“setState”
import React from 'react';
class TimeoutModal extends React.Component {
constructor(props) {
super(props);
this.state = {
timeLeft: 60,
timeoutModal: true
};
}
componentDidMount() {
setInterval(() =>{
this.setState({ timeLeft: this.state.timeLeft - 1 });
}, 1000);
}
handleClick(e) {
this.setState({timeoutModal: false});
}
render() {
console.log(this.props.timeoutStatus);
return (
<div className="timeout-modal">
<div className="timeout-modal__container">
<p>Would you like to continue? {this.state.timeLeft}</p>
<button onClick={this.handleClick} className="timeout-modal__container-button">Yes</button>
</div>
</div>
);
}
}
export default TimeoutModal;
解决方案
您需要将handleClick
事件与当前组件实例绑定。所以将onChange
事件处理程序更改为。
<button onClick={this.handleClick.bind(this)} className="timeout-modal__container-button">Yes</button>
从文档:
您必须小心 JSX 回调中 this 的含义。在 JavaScript 中,默认情况下不绑定类方法。如果您忘记绑定
this.handleClick
并将其传递给 onClick,则在 实际调用该函数时this 将是未定义的。
当您将它们绑定到构造函数中然后使用它们时,会更干净。
constructor(props) {
super(props);
this.state = {
timeLeft: 60,
timeoutModal: true
};
this.handleClick = this.handleClick.bind(this)
}
现在编写处理程序。
<button onClick={this.handleClick} className="timeout-modal__container-button">Yes</button>
推荐阅读
- typescript - 不同的返回类型取决于输入
- mongodb - 将独立的 MongoDB 实例转换为单节点副本集
- firebase - 我们可以在firebase中通过UID搜索用户应用程序版本和设备操作系统吗?
- git - 如何在 vscode 中隐藏 git blame 时间线?
- ios - 用objective-c中的图像尺寸更改UIImage上文本的字体大小
- next.js - 如何在永久使用后停止我的节点应用程序以启动它
- crafter-cms - CrafterCMS 在初始设置后没有配置站点
- r - 如何使用 R 制作多个箱线图
- javascript - 当孩子也经过时,道具看起来像未定义
- python - 正则表达式匹配包含两个连续数字和字母条纹的“单词”,反之亦然并将它们拆分