2017-12-18 145 views
0

我使用Redux作爲用於編輯當前選定項目(包含這些屬性:「name」和「selected」)的名稱的組件中的初始狀態。它用作本地初始狀態,因爲我只想在點擊保存按鈕(我還沒有實現)時更新Redux全局狀態。使用Redux作爲初始組件狀態

constructor(props) { 
    super(props) 
    this.state = { 
     item: this.props.item 
    } 
} 

我的渲​​染功能包括編輯名稱輸入:

<TextField 
    id={"name"} 
    value={this.state.item.name} 
    onChange={e => this.updateName(e.target.value)} 
/> 

的updateName()函數是:

updateName = (value) => { 
    var newItem = this.state.item 
    newItem.name = value 
    this.setState({item: newItem}) 
} 

在這裏,我可以選擇的項目,對默認的值在所選項目的名稱後面輸入更改(當我選擇一個項目時,Redux的狀態會更新,組件的狀態和輸入中的文本也會更新)。一切都按照計劃進行。

當我寫入輸入時,寫入的文本會改變,但是選擇項目的操作不會再更新輸入的文本(它應該跟隨從Redux中選擇的項目的名稱,就像我輸入文本之前一樣)。

是否因爲使用this.setState()更新組件狀態後,對this.props.item的引用(以及後來的Redux更新)就會丟失?但是我怎樣才能糾正這個問題呢?

回答

1

請記住,constructor僅被調用一次,而您的輸入是由您的狀態命令的受控組件。

您需要做的是根據redux狀態更新組件狀態,以便在componentWillReceiveProps方法中對此進行更新。

請注意:使用道具更新狀態被認爲是反模式。

+0

它解決了這個問題,謝謝! – Noha