道具不更新州的价值

时间:2017-02-25 11:50:20

标签: javascript reactjs key

我将值传递给子组件Field:

INSERT INTO @tmpTable
SELECT v.VehicleHistoryBlobId 
FROM VehicleHistoryBlob v
WHERE v.VehicleHistoryBlob.exist('/Bus/Destination') = 1

在Field状态应该通过props更新:

<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
    };
}

但是在Field的构造函数中这一行: <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,。只有更改fieldName才会触发value

的更改

enter image description here

我认为它与value道具有某种关系。 这可能有什么问题?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望使用最新道具更新组件的状态。这样做的最佳位置是componentWillReceiveProps生命周期方法。您将在此方法中将nextProps作为参数,您可以使用新值调用setState。

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

另外,您可以添加一个检查,以查看是否在props中更改了value和fieldName。如果不是,您可以优化以不重新渲染组件。