我有一个简单的反应组件,我相信它有一个受控输入的表单:
import React from 'react';
export default class MyForm extends React.Component {
constructor(props) {
super(props);
this.state = {}
}
render() {
return (
<form className="add-support-staff-form">
<input name="name" type="text" value={this.state.name} onChange={this.onFieldChange('name').bind(this)}/>
</form>
)
}
onFieldChange(fieldName) {
return function (event) {
this.setState({[fieldName]: event.target.value});
}
}
}
export default MyForm;
当我运行我的应用程序时,我收到以下警告:
警告:MyForm 正在将文本类型的不受控制的输入更改为
受控。输入元素不应从不受控制切换到
控制(反之亦然)。决定使用受控或
组件生命周期内不受控制的输入元素
我相信我的输入是受控的,因为它具有价值。我想知道我做错了什么?
我正在使用 React 15.1.0
原文由 alexs333 发布,翻译遵循 CC BY-SA 4.0 许可协议
对于要控制的输入,它的值必须对应于状态变量的值。
在您的示例中最初没有满足该条件,因为
this.state.name
最初没有设置。因此,输入最初是不受控制的。一旦第一次触发onChange
处理程序,就会设置this.state.name
。此时,满足上述条件,认为输入受控。这种从不受控到受控的转变会产生上面看到的错误。通过在构造函数中初始化
this.state.name
:例如
输入将从一开始就受到控制,从而解决问题。有关更多示例,请参阅 React 受控组件。
与此错误无关,您应该只有一个默认导出。您上面的代码有两个。