2017-06-14 39 views
1

在我的反應js應用程序中,我似乎無法將狀態值用作子組件的道具。不能使用狀態值作爲子組件的道具

在父組件constructor中,應用程序具有一個空狀態,稱爲selectedWarehouseID

此狀態(selectedWarehouseID)應更新爲componentWillMount()方法中的某些信息。

現在,在父組件的render方法中,我嵌入另一個具有此狀態作爲道具的子組件。

<ItemChooser 
    productsByWarehouse = { this.state.selectedWarehouseID } 
/> 

現在,這裏的問題,在子組件的this.props.productsByWarehouse值總是null。我發現了一個很好的explanation爲什麼發生這種情況,但如何等待父母componentWillMount()中更新的數據訪問在子組件道具中傳遞的狀態的更新值?

+0

代替更新'componentWillMount'中的狀態,在'componentDidMount'中更新它並使用setState,child將自動獲取更新狀態值作爲道具。如果這個計算不是很大,那麼直接從構造函數中調用一個函數,並用該值初始化狀態,而不是null。 –

+0

@MayankShukla這沒有奏效,仍然是空值 – rakibtg

+0

你可以顯示代碼如何更新該方法的狀態?一個問題是「你在兒童組件的狀態下存儲道具值?」 –

回答

1

可能的解決方案是:

您在子組件的state存儲props值,因此,更新子組件的狀態,只要任何變化發生props值(父的狀態)。爲此使用componentWillReceiveProps生命週期方法。

componentWillReceiveProps():

一個安裝組件接收新道具之前被調用。如果您需要 更新狀態以響應支柱更改(例如,重置 it),則可以比較this.props和nextProps,並在此方法中使用this.setState()執行狀態 轉換。

像這樣:

componentWillReceiveProps(newProps){ 
    this.setState({ 
     value: newProps.productsByWarehouse 
    }); 
} 

注:由您在其中存儲值的實際鍵替換值。

2.props值不要存放在子組件的狀態,直接使用this.props.productsByWarehouse,每當你更改父狀態值,兒童將自動獲得在props更新後的值。

+0

'componentWillReceiveProps()'做了詭計,非常感謝 – rakibtg

相關問題