Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 道具不';t更新状态值_Javascript_Reactjs_Key - Fatal编程技术网

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