问题描述
在这里,我试图在同级组件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
来设置其自己的状态,从而导致自身及其子级的重新渲染,这就是创建循环的方式。您应该将其移至接收响应的代码部分。