如何解决ReactJs:状态变化的渲染进入无限循环
在这里,我试图在同级组件A和B之间传递数据,在此我希望在组件A中的异步事件完成后重新呈现组件B。
class ParentComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
valueKey: '',};
}
parentFunction(dataFromChild) {
this.setState({ valueKey: dataFromChild });
}
render() {
const { valueKey } = this.state;
return (
<div>
<componentA
url={url}
...
functionCallFromParent={() => this.parentFunction()}
/>
<componentB valueFromParent={valueKey} />
</div>
);
}
}
class componentA extends React.Component {
constructor(props) {
super(props);
this.state = {
items: null,};
// asynchronous request made to server which updates the state when response received.
this._getTiles();
}
render() {
const { items } = this.state;
if (items && items.asArray().length > 0) {
functionCallFromParent('Hello From Child1');
return (
<div>
{tiles}
</div>
);
}
return null;
}
}
问题是,每次componentA调用functionCallFromParent()时,都会执行ParentComponent的呈现,然后重新渲染componentA和componentB,然后此循环继续。鉴于我只希望在组件A要求时重新渲染组件B。解决方法
functionCallFromParent()
放在render()
的{{1}}内部,这意味着每次渲染/重新渲染组件时都会调用它,这会发生很多!发生这种情况时,将调用ComponentA
来设置其自己的状态,从而导致自身及其子级的重新渲染,这就是创建循环的方式。您应该将其移至接收响应的代码部分。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。