【发布时间】:2021-09-14 04:00:26
【问题描述】:
我有一个带有状态变量的父组件,该状态变量在交互时被其子组件之一更改。然后父级还包含一些基于状态变量中的数据的更多组件。
问题是子组件在其父组件的状态发生更改时重新渲染,因为对 setState 函数的引用发生了更改。但是当我使用 useCallback(建议 here)时,我父母的状态根本不会更新。
这是我目前的设置:
function ArtistGraphContainer() {
const [artistPopUps, setArtistPopUps] = useState([])
const addArtistPopUp = useCallback(
(artistGeniusId, xPos, yPos) => {
setArtistPopUps([{artistGeniusId, xPos, yPos}].concat(artistPopUps))
},
[],
)
return (
<div className='artist-graph-container'>
<ArtistGraph addArtistPopUp={addArtistPopUp} key={1}></ArtistGraph>
{artistPopUps.map((popUp) => {
<ArtistPopUp
artistGeniusId={popUp.artistGeniusId}
xPos={popUp.xPos}
yPos={popUp.yPos}
></ArtistPopUp>
})}
</div>
)
}
还有子组件:
function ArtistGraph({addArtistPopUp}) {
// querying data
if(records) {
// wrangling data
const events = {
doubleClick: function(event) {
handleNodeClick(event)
}
}
return (
<div className='artist-graph'>
<Graph
graph={graph}
options={options}
events={events}
key={uniqueId()}
>
</Graph>
</div>
)
}
else{
return(<CircularProgress></CircularProgress>)
}
}
function areEqual(prevProps, nextProps) {
return true
}
export default React.memo(ArtistGraph, areEqual)
在任何其他情况下,子组件的重新渲染都不会是这样的问题,但遗憾的是它会导致图形重绘。
那么如何在不重绘图表的情况下更新父组件的状态?
提前致谢!
【问题讨论】:
标签: javascript reactjs react-hooks