当你使用 的 onChange={this.onFieldChange('name').bind(this)} 强> 在您的输入中,您必须将状态空字符串声明为属性字段的值。
onChange={this.onFieldChange('name').bind(this)}
的 方式错误: 强>
this.state ={ fields: {}, errors: {}, disabled : false }
的 正确方法: 强>
this.state ={ fields: { name:'', email: '', message: '' }, errors: {}, disabled : false }
在初始状态下将值设置为“name”属性。
this.state={ name:''};
在我的情况下,我错过了一些非常微不足道的东西。
<input value={state.myObject.inputValue} />
当我收到警告时,我的状态如下:
state = { myObject: undefined }
通过交替我的状态 的 引用我的值的输入 强> ,我的问题解决了:
state = { myObject: { inputValue: '' } }
如果组件上的props已作为状态传递,请为输入标记设置默认值
<input type="text" placeholder={object.property} value={object.property ? object.property : ""}>
在构造函数中将字段值设置为“”(空字符串)的一个潜在缺点是,该字段是可选字段并且未编辑。除非在发布表单之前进行一些按摩,否则该字段将作为空字符串而不是NULL保留到数据存储中。
这个替代方案将避免空字符串:
constructor(props) { super(props); this.state = { name: null } } ... <input name="name" type="text" value={this.state.name || ''}/>
另一种方法是在输入中设置默认值,如下所示:
<input name="name" type="text" value={this.state.name || ''} onChange={this.onFieldChange('name').bind(this)}/>
这通常仅在您在应用程序启动时未控制字段的值时以及在某个事件或某个函数触发或状态更改之后才会发生,您现在正尝试控制输入字段中的值。
这种无法控制输入然后控制输入的转变是导致问题首先发生的原因。
避免这种情况的最佳方法是在组件的构造函数中为输入声明一些值。 这样输入元素从应用程序的开头就具有值。
我知道其他人已经回答了这个问题。但是,这里一个非常重要的因素可能会帮助其他人遇到类似的问题:
你必须要有 onChange 处理程序在您的输入字段中添加(例如textField,checkbox,radio等)。并始终处理活动 onChange 处理程序,如:
onChange
<input ... onChange={ this.myChangeHandler} ... />
和你一起工作的时候 的 复选框 强> 那么你可能需要处理它 checked 国家与 !! 喜欢:
checked
!!
<input type="checkbox" checked={!!this.state.someValue} onChange={.....} >
参考: https://github.com/facebook/react/issues/6779#issuecomment-326314716