我有一個孩子組件表需要每次都被渲染其狀態的變化,而且,有時,當新道具從父到達;ReactJS組件的使用道具或國家決策呈現
表組件應該是可重用並處理其自己的狀態。當它的寬度發生變化時,我使用setState(newTableWidth)來重新渲染表格(目前爲止,效果很好)。
父應用程序項目是創建表組件並傳遞初始寬度的項目。
問題: 當在父應用程序的改變(或者在不同的子組件),我要更新的props.tableWidth和重新渲染表。但還有其他場景,其中項目呈現表而不更新props.tableWidth。
表怎麼能知道何時使用道具呈現自身以及何時使用狀態呈現自身?
代碼示例:
class Table extends React.Component {
constructor(props) {
this.state = {
tableWidth: this.props.tableWidth
columnOrder
};
}
onWidthChange(newWidth){
this.setState({tableWidth:newWidth})
}
}
class Project extends React.Component {
render(){
if (this.onChangeTableWidth()){
let width = this.calculateTableWidth();
}
<Table tableWidth = {width}/>
}
}
但是如果道具沒有變化,但是我希望_Table_使用道具而不是狀態呢? 例如: 我渲染_Table_道具:tableWidth = 100 現在_Table_改變了他的狀態,以tableWidth = 200 現在_Project_組件觸發onChangeTableWidth(),並需要與tableWidth再次重新渲染_Table_ = 100 在這種情況下,道具沒有改變,所以我的tableWidth將是200而不是100 –
我會說,只讓容器(父)組件負責改變tableWidth,例如通過道具傳遞一個函數,它將作爲'onChangeTableWidth(width)處理程序,並在容器中保留寬度,或者至少始終傳遞通過函數參數獲得的寬度。通過這種方式,只有一個真相源,它是容器組件,並且永遠不會混淆寬度的設置方式,因爲它仍然以相同的方式更新。然而,正如已經提到的人,你也可以使用一些國家管理機制,我建議你看看redux或mobx。 –