微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ReactJs:状态变化的渲染进入无限循环

如何解决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 举报,一经查实,本站将立刻删除。