Javascript 道具不';t更新状态值
我正在将值传递给子组件字段:Javascript 道具不';t更新状态值,javascript,reactjs,key,Javascript,Reactjs,Key,我正在将值传递给子组件字段: <Field key = {field.fieldName} fieldName = {field.fieldName} value = {field.value} getModField={this._getModField.bind(this)} /> I更新后的值应显示在另一个字段中: <div className = "form-group" key = {this.props.fieldName} > <input
<Field key = {field.fieldName} fieldName = {field.fieldName} value = {field.value}
getModField={this._getModField.bind(this)} />
I更新后的值应显示在另一个字段中:
<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=input}/>
但在该行的构造函数中:
value:this.props.value,
不更新值
。只有更改字段名才会触发值的更改
我认为这与key
prop有某种关系。
这里有什么问题?如果我理解正确,您希望使用最新的道具更新组件的状态。最好的方法是组件将接收props
生命周期方法。在这个方法中,您将获得nextProps作为参数,在此基础上,您可以使用新值调用setState
componentWillRecieveProps(nextProps) {
this.setState({
fieldName: nextProps.fieldName,
value: nextProps.value
});
}
此外,您还可以添加一个检查,查看props中的值和字段名是否更改。如果没有,您可以优化以不重新呈现组件。是的,它有助于更新状态,但输入字段中的defaultValue={this.state.value}
仍然为空。它仅在fieldName
更改时获取更新值,以更新需要传递initialValue
而不是defaultValue
的输入元素。它仅在更改fieldName时更新,因为您正在根据fieldName
设置键,因此组件发生更改。这意味着如果我传递的不是fieldName,而是其他静态变量(从不更改),则意味着所有其他字段也不会更改。有办法解决吗?对不起,这里有个更正。initialValue不是输入元素的属性。您可以使用defaultValue,但这只在第一次安装组件时起作用。value prop是输入元素的当前值,但它不会重新渲染输入元素。我通常通过value
属性形成输入元素的键,这样当我传递一个新值时,它就会出现。
componentWillRecieveProps(nextProps) {
this.setState({
fieldName: nextProps.fieldName,
value: nextProps.value
});
}