在重新提交时,父组件的道具被忽略为子组件的道具?

时间:2019-06-23 18:36:13

标签: reactjs

预先道歉,这不是一个特定的编码问题,但是我发现这是一个奇怪的错误,我很可能会打破某些反应原理来获取此信息,但我不确定做错了什么。< / p>

在这里也很难做到完整的可重现示例,但这是问题的关键-在反应中,我有一个图形组件(d3assistnets),它生成SVG并呈现子表组件(AssistNetTable)。图形组件的渲染如下所示:

... 
...
render() {
    const { svgID, assistNetData } = this.props;
    console.log('this.props d3assistnet: ', this.props);

    return (
        <React.Fragment>
            <Col xs={7}>
                <svg id={svgID} style={{ padding: '0' }}>
                    <g className='links' />
                    <g className='nodes' />
                </svg>
            </Col>
            <Col xs={5}>
                <AssistNetTable
                    tableData={assistNetData.links}
                />
            </Col>
        </React.Fragment>
    );
}

图形组件的名称为d3assistnets,该组件传递了4个道具,其中2个为svgID和AssistantNetData,如在渲染中所示。但是,this.props的console.log()如下所示:

enter image description here ...由于某些奇怪的原因,父d3assistnets组件上的this.props在重新渲染d3assistnets组件时成为tableData对象,这是传递给子AssistNetTable组件的道具!

当我从d3assistnets的呈现中删除AssistNetTable时,this.props console.log不再变得混乱-它们仍然像预期的那样保留svgID,AssistantNetData等。

我已经仔细检查了AssistNetTable组件,并且没有任何状态设置或任何类似性质的操作-它只需要使用tableData道具并使用它来呈现表格。 AssistNetTable中也没有console.logs。

为什么将父组件上的this.props对象更改为tableData对象只是我的理由……也许我在某个地方违反了反应规则?任何帮助,将不胜感激!

编辑:当我将tableData道具与父道具更改为价差运算符时:

<AssistNetTable
    {...this.props} 
/>

...它冻结了我的浏览器,并且控制台迅速被this.props d3assistnets的console.logs()填满,所以这里似乎有一个永远的循环……我不是非常确定什么叫做无限重渲染,因为AssistNetTable不会执行任何stateSetting,但我想我必须对此进行深入研究。我不确定无限重新渲染是否与父项道具的更改有关...

Edit2 :我可能只是将2个组件合并为1个,因为它的代码很多,而且它们在一起很有意义...

0 个答案:

没有答案