我将值传递给子组件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
我认为它与value
道具有某种关系。
这可能有什么问题?
答案 0 :(得分:1)
如果我理解正确,您希望使用最新道具更新组件的状态。这样做的最佳位置是componentWillReceiveProps
生命周期方法。您将在此方法中将nextProps作为参数,您可以使用新值调用setState。
componentWillRecieveProps(nextProps) {
this.setState({
fieldName: nextProps.fieldName,
value: nextProps.value
});
}
另外,您可以添加一个检查,以查看是否在props中更改了value和fieldName。如果不是,您可以优化以不重新渲染组件。