javascript - 如何阻止调用堆栈过载?
问题描述
我的问题很简单,但令人愤怒。我想做的就是有一个onClick
事件,当触发时会改变组件的状态。唯一的问题是,如果我不停止addActiveClass
函数最初使用加载的 state 属性运行,那么我会得到调用堆栈重载,因为这个组件是由.map
函数呈现的。
第二个我删除if (this.state.loaded) { //logic }
了我得到的状态更改逻辑
请帮助我理解为什么我不能在 React 中做这个简单的事情。
class IndividualQA extends Component {
constructor(props) {
super(props);
// this.addActiveClass = this.addActiveClass.bind(this);
this.state = {
active: false,
loaded: false
};
// this.state({ arrowState: this.props.arrowClass });
}
addActiveClass = (load) => {
if (this.state.loaded) {
const currentState = this.state.active;
console.log(this.state);
this.setState({ active: !currentState });
}
};
render() {
return (
<div>
<div className="row">
<div className="col-xl-11 col-lg-11 col-md-11 col-sm-10 col-10">
{this.props.data.Q}
</div>
<div className="col-xl-1 col-lg-1 col-md-1 col-sm-2 col-2 Question">
<a
data-toggle="collapse"
href={`#QA${this.props.id}`}
id="arrowSVG"
onClick={this.addActiveClass()}
>
<img
style={{ height: "30px" }}
className={this.state.active ? "transform" : ""}
src={downArrow}
/>
</a>
</div>
</div>
<div className="row collapse" id={`QA${this.props.id}`}>
<div className="col-xl-11 col-lg-11 col-md-11 col-sm-11 col-11 As-a-long-time-Kiva">
{this.props.data.A}
</div>
</div>
<hr />
</div>
);
}
}
export default IndividualQA;
解决方案
你的问题在这里
<a
data-toggle="collapse"
href={`#QA${this.props.id}`}
id="arrowSVG"
onClick={this.addActiveClass()} //here
>
这种方式addActiveClass
将在每次渲染时调用,并可能导致无限循环。
您需要将其更改为
<a
data-toggle="collapse"
href={`#QA${this.props.id}`}
id="arrowSVG"
onClick={this.addActiveClass} // without '()'
>
推荐阅读
- intellij-idea - IntelliJ 上的 Docker-Plugin 与 VirtualBox 上的 Docker-Daemon 连接时出现问题
- hybris - 如何自定义 b2bacceleratoraddon 插件
- bash - 如何将所有文件和目录从本地驱动器复制到 HDFS?
- android - Admob - 广告单元的数量
- android - 如何获取android studio(Camera2)中的核心数量
- c# - “无法解析 T[] modreq(System.Runtime.CompilerServices.IsVolatile)”
- c# - 如何使用图形 API 从 OneDrive 获取文件共享人员详细信息
- mysql - MySQL 您正在使用安全更新模式,并且您尝试在没有 WHERE 的情况下更新表
- c# - EF Core with SQLite on xamarin:如何删除数据库并通过代码重新运行迁移
- python - Selenium Chromedriver 错误 chome 无法访问,但驱动程序可以正常工作