预先道歉,这不是一个特定的编码问题,但是我发现这是一个奇怪的错误,我很可能会打破某些反应原理来获取此信息,但我不确定做错了什么。< / 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()如下所示:
...由于某些奇怪的原因,父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个,因为它的代码很多,而且它们在一起很有意义...