export class ABC extends React.Component {
constructor(props) {
super(props);
this.state = {
abc: null
};
}
renderOptions() {
this.setState({
abc: abcArray.length !== 0
});
return;
}
renderRadio() {
return (
<Field
id="abc"
name="abc"
values={this.renderOptions()}
/>
);
}
render() {
return (
<div>
{this.renderRadio()}
</div>
);
}
}
export default connect(mapStateToProps)(ABC);我试图在setState中使用renderOptions(),这给出了下面的错误。
错误:超过最大更新深度。当组件在componentWillUpdate或componentDidUpdate中反复调用componentDidUpdate时,就会发生这种情况。React限制嵌套更新的数量,以防止无限循环。
我无法理解我在这里做错了什么。
任何帮助都是非常感谢的。
发布于 2022-08-25 17:29:26
在renderRadio() -> values={this.renderOptions()}中,您正在调用renderOptions函数。该函数调用this.setState({abc: abcArray.length !== 0});。然后,react将尝试重新修改组件。这将创建一个循环。为了避免这种情况,您应该将值支柱更改为这个values={this.renderOptions}
我已经重构了你的代码。
export class ABC extends React.Component {
constructor(props) {
super(props);
this.state = {
abc: null
};
}
renderOptions() {
this.setState({
abc: abcArray.length !== 0
});
return;
}
renderRadio() {
return (
<Field
id="abc"
name="abc"
values={this.renderOptions}
/>
);
}
render() {
return (
<div>
{this.renderRadio()}
</div>
);
}
}
export default connect(mapStateToProps)(ABC);发布于 2022-08-25 17:29:00
您的render方法正在调用setState,这将触发再次调用render。
您不应该在setState中调用renderOptions。
https://stackoverflow.com/questions/73491537
复制相似问题