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

IT技术 javascript reactjs state
2021-05-14 04:00:28

错误代码

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

描述

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

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

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

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

尽管我可以将这些状态中的每一个预定义为“showMonday_morning”等。但我尽量避免使用它,因为我想学习如何在循环中动态创建状态以供将来参考。

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

问题

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

2个回答

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

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

我可以轻视这个错误还是应该解决这个问题?

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

据我所知,React.js 告诉你决定使用一种类型的 Input 元素,受控或非受控,如果你在一个组件中同时拥有这两种元素,你会看到那个警告,我建议制作一个自定义 InputComponent你可以在你的 React 应用程序中使用它。

这个警告不被认为是危险的,它是为了更干净的 React 和优化。