我在玩React,我得到了我想要的功能,但是由于某个地方的无限循环,它非常慢。我相信它在组件生命周期方法中,但我不知道如何重新格式化下面的代码,使其具有相同的功能,但没有无限循环。任何关于最佳实践的建议都将不胜感激。
class App extends Component {
constructor() {
super();
this.state = {
num: 13,
num2: 10,
total: 0
}
}
componentDidMount() {
this.addNums();
}
componentDidUpdate() {
this.addNums();
}
addNums(){
var added = parseInt(this.state.num) + parseInt(this.state.num2);
this.setState({total: parseInt(added)});
}
change(num) {
this.setState({num: num});
console.log(this.state);
}
change2(num2) {
this.setState({num2: num2});
console.log(this.state);
}
render(){
return (
<div>
<TopBar />
<Combinatoric test={this.state.num} changeNumber={this.change.bind(this)}/>
<Combinatoric test={this.state.num2} changeNumber={this.change2.bind(this)}/>
<h2>Total: {this.state.total}</h2>
<h1>hello world</h1>
</div>
);
}
}
无限循环发生是因为您在生命周期函数中调用了this.addNums()
。addNum
设置导致组件更新的状态,因此再次调用组件更新
,因此循环继续。
您可以删除此函数,因为状态中存在num和
num2,然后可以根据
num2在渲染中计算总数
class App extends Component {
constructor() {
super();
this.state = {
num: 13,
num2: 10,
total: 0
}
}
change(num) {
this.setState({num: num});
console.log(this.state);
}
change2(num2) {
this.setState({num2: num2});
console.log(this.state);
}
render(){
var total = parseInt(this.state.num) + parseInt(this.state.num2);
return (
<div>
<TopBar />
<Combinatoric test={this.state.num} changeNumber={this.change.bind(this)}/>
<Combinatoric test={this.state.num2} changeNumber={this.change2.bind(this)}/>
<h2>Total: {total}</h2>
<h1>hello world</h1>
</div>
);
}
}
在我的情况下,这是因为用于反应头盔
组件的深度相等
包装。我通过将版本从5.2.0
增加到6.0.0测试版
来修复它。
我在react中工作,基本上我想做一个带工具提示的按钮,现在我正在做工具提示。我正在更改css显示属性,以使它在鼠标进入和离开时可见或不可见。但是有一个错误,我不知道该怎么办... 这是我的代码: 在控制台中,我收到了这个错误: 我找不到问题出在哪里。我知道这可能是关于调用一个函数,而这个函数又调用另一个函数。但是我在代码中看不到这样的东西,我不确定是否都是这样。谢谢帮助:)
我是React的初学者。js并试图理解道具的概念 我有两个组件 - UserData.jsx UserDataResult.jsx 在UserData中。jsx我用过这个。用户记录的状态。我想通过子组件UserDataResult.jsx显示此记录。 不知道我做错了什么,所以我在控制台日志中得到错误。 错误是:未捕获的范围错误:超出最大调用堆栈大小 代码: **UserData.jsx** **用
下面的代码抛出了问题标题中提到的堆栈溢出。我正试图让一个方框阴影以脉冲效果显示在一个圆形图像的周围。有人能指出递归吗?我是一个Javascript新手,看不出来。谢谢你。 断续器 CSS 脚本
我刚刚开始使用角度2。所以我尝试使用Web服务从数据库显示类别。 这是我的论坛.服务.ts文件 forum.component.ts: forum.component.html: 请帮忙,先谢了
我正在检查要设置的配置值,如果是,我想重定向到子路由。如果不是像往常一样显示。代码确实按预期更新了URL,但随后进入了无限循环。
我正在使用对话框,并从Material-UI和React中选择组件。 只是一个例子: 在点击select之后,我从Modal.js得到了这个错误: "未捕获的RangeError:最大调用堆栈大小超出。在HTMLDocument.Modal._this.enforceFocus(Modal.js?86a5:197)" 有什么想法吗?