组件将文本类型的受控输入更改为不受控制-ReactJS

时间:2019-07-06 16:52:40

标签: javascript arrays reactjs object controlled-component

我有一个页面,我在其中从服务器中获取数据并为受控输入设置状态值。 (例如,我输入的值为this.state.name,例如,我从服务器获取名称Dave并将其设置为名称,因此输入值为Dave。它可以工作,但是我遇到了对象数组问题

这就是状态

this.state = {
        ingredients: [{ ingredient: "", quantity: '' }],
        //other properties
   }

这就是我使用ingredients

的方式
{this.state.ingredients.map(({ ingredient, quantity }, index) => (


   <div key={index}>
        ingredient: <input value={ingredient} className="ingredientClass" type="text" autoComplete="off" placeholder="e.g: pepper" onChange={{e => this.update(index, "ingredient", e.target.value)} />
        quantity: <input value={quantity} autoComplete="off" type="text" placeholder="e.g: 1g" onChange={e => this.update(index, "quantity", e.target.value)} />
        <button onClick={this.BtnClick}>delete</button> <br />
       {this.state.errorFor === 'ingredientsfield' ? this.state.errmsg : null}
   </div>
))}

但这会导致此错误:

  

警告:组件正在将文本类型的受控输入更改为不受控制。输入元素不应从受控状态切换到非受控状态(反之亦然)。确定在组件的使用寿命期间使用受控或不受控制的输入元素。更多信息:link

为什么会这样?我该如何解决?

P.S:我检查了一下,然后从服务器成功获取了配料

更新:onChange事件的代码

update(index, key, value) {
    this.setState(({ ingredients }) => ({ ingredients: ingredients.map((ing, i) => i === index ? { ...ing, [key]: value } : ing) }));
    console.log(this.state.ingredients)
}

1 个答案:

答案 0 :(得分:2)

问题在于输入之一在某个时刻具有未定义或空值。

我无法理解您显示的代码将输入值更改为null(未定义)的原因。但是您可以在应用程序运行期间使用ReactDevTools观察输入的值。