在我的陣營應用程序的根組件,我有這樣的:React JSX:父組件的重新渲染是否會重新加載子組件?
class App extends Component {
...
ComponentDidMount() {
window.addEventListener('resize', this.handleResize, false);
}
handleResize{
this.parentSize = {height: window.innerWidht - this.node.offsetLeft ..., width: ...};
this.forceUpdate();
}
render() {
<div ref="e=>this.node=e}>
<ChildComponent parentSize={this.ParentSize} />
</div>
}
}
我注意到,當應用程序組件重新呈現,無論是通過的setState或forceUpdate(),子組件實際上是重新安裝(這樣componentWillUnmount, componentWillMount,每次更新時調用componentDidMount)。我期望的行爲是隻再次調用Child組件的渲染函數。我最近升級到React-router 4.x,所以我不確定它是否與此有關。
有人可以告訴我,如果這是由設計?讓我的componentDidMount多次調用會導致一些問題,因爲我試圖在其中獲取數據,並且我不想在調整大小時多次執行那些昂貴的操作。
UPDATE:
我發現這個問題的可能原因。我有多個嵌套的組件,並且由於很難發佈整個項目,所以有時很難發佈導致問題的實際代碼。但我認爲這是它:
return (
<div className="app-view" style={style} ref={el=>this.node=el}>
<Switch>
<Route exact path='/' component={() => <Home store={store} />} />
<Route path='*' component={Error404} />
</Switch>
</div>
);
在這裏,我試圖通過道具的組件(路徑陣營路由器4.x版) 我這樣做是通過提供可創建主頁,一個函數可能會在每個渲染中重新創建主頁。
所以問題就變成了,如何在道路上的每個渲染中不通過頁面的娛樂而傳遞道具?
你可以添加你的ChildComponent代碼嗎?它不應該多次調用componentDidMount,除非你導航。 – Dev
可能的罪魁禍首是孩子正在接收一組更新的道具或狀態,它們會引發重新渲染。請分享您的兒童組件。 –
查看更新:()=>裏面的路線是我想的問題引起的。 子組件代碼被替換爲一個虛擬實體,該虛擬實體除了將生命週期方法記錄到控制檯以外,無法進行調試。所以問題出現在父組件中,我相信它在我的問題的更新部分。 –