2017-02-25 94 views
0

我傳遞價值的子組件字段值:道具不更新狀態

<Field key = {field.fieldName} fieldName = {field.fieldName} value = {field.value} 
getModField={this._getModField.bind(this)} /> 

,並在現場應該通過道具進行更新:

constructor(props){ 
    super(props); 

    this.state = { 
     value: this.props.value, 
     fieldName: this.props.fieldName 
    }; 
} 

我應該顯示更新的值在另一個領域:

<div className = "form-group" key = {this.props.fieldName} > 
    <input className="col-sm-2 control-label" name={this.props.value} 
      defaultValue={this.state.value} onChange={this._handleChange.bind(this)} 
      ref={(input) => this._value = input} /> 
</div> 

但在現場這條線的構造: value: this.props.value, 不更新value。字段名的唯一的變化引發的value

enter image description here

變化我認爲這是某種聯繫key道具。 這裏有什麼問題?

回答

1

如果我理解正確,你想用最新的道具更新你的組件的狀態。最好的地方是componentWillReceiveProps生命週期方法。在此方法中,您將獲得nextProps作爲參數,您可以使用該值調用setState。

componentWillRecieveProps(nextProps) { 
    this.setState({ 
    fieldName: nextProps.fieldName, 
    value: nextProps.value 
    }); 
} 

此外,您可以添加一個檢查,以查看值和fieldName是否在道具中更改。如果沒有,您可以優化以不重新渲染組件。

+0

是的,它有助於更​​新狀態,但輸入字段中的'defaultValue = {this.state.value}'仍然爲空。當'fieldName'改變 – hasan

+0

來更新一個你需要傳遞'initialValue'而不是'defaultValue'的輸入元素時,它只會得到更新值。它只會在fieldName被更改時更新,因爲您正在根據「fieldName」設置鍵,因此組件已更改。 – lavish

+0

React出現錯誤:'Unknown prop initialValue'。 – hasan