我应该忽略React警告:输入元素不应该从不受控制切换到受控制吗?

时间:2018-12-06 07:36:49

标签: javascript reactjs state

错误代码

警告:组件正在更改要控制的类型为时间的不受控制的输入。输入元素不应从不受控制切换为受控制(反之亦然)。在组件的生命周期中决定使用受控还是不受控制的输入元素。

说明

因此,我有一个组件,可以根据数组中的项目动态呈现多个输入字段。我的数组包含7天,并且每天循环输入多个字段。每个输入字段也有一个动作。通过单击按钮,我可以选择某些输入字段是否需要具有相同的内容或不同的内容。这些输入字段中的每个字段也都需要具有唯一状态。因此,我创建了一个空状态,如下所示:

constructor(props) {
        super(props);
        this.state = {};
    }

并在我的循环中创建它,如下所示:

() => this.setState({ ['show' + day + '_morning'] : true })
() => this.setState({ ['show' + day + '_afternoon'] : true })

尽管我可以将每个状态预定义为'showMonday_morning'等。我试图避免使用它,因为我想学习如何动态创建循环状态以供将来参考。

一切正常,但我从上面收到错误代码。

问题

我可以掉以轻心这个错误还是应该解决?如果必须解决该问题,如何在循环内动态创建和添加状态并避免出现此错误?

2 个答案:

答案 0 :(得分:1)

据我所知,React.js告诉您决定使用一种类型的Input元素(可控制或不可控制),如果您在组件中同时拥有这两个元素,则会看到该警告,我建议您一个自定义的InputComponent,您可以在整个React App中使用它。

此警告不被认为是危险的,它是为了更简洁的React和优化。

答案 1 :(得分:1)

您不需要在构造函数中动态创建状态。相反,您可以有条件地在渲染中使用它。

<input value={this.state.['showSatMorning'] || ''} />
  

我可以掉以轻心还是要解决这个错误?

尽管此警告不会影响您应用中的任何内容,但最好处理此类警告以使您的应用保持一致并避免意外问题