首页 > web前端 > js教程 > 为什么我在 ReactJS 应用程序中收到'组件正在更改要控制的文本类型的不受控制的输入”警告?

为什么我在 ReactJS 应用程序中收到'组件正在更改要控制的文本类型的不受控制的输入”警告?

Mary-Kate Olsen
发布: 2024-10-28 12:43:01
原创
432 人浏览过

Why am I getting the

不受控制和受控制的输入元素:ReactJS 警告指南

ReactJS 建议保持输入元素控制状态的一致性。在某些情况下,您可能会遇到警告:“组件正在更改要控制的文本类型的不受控制的输入。”让我们深入探究原因并探索有效的解决方案。

问题根源

在 ReactJS 中,输入元素可以是受控的,也可以是不受控的。受控输入是其值由组件状态管理的输入,而非受控输入允许用户直接更改其值。当最初声明为不受控的输入后来转换为受控输入时,就会出现问题。

考虑以下代码:

<br>class MyComponent extends React.Component {<br> 构造函数(props) {<pre class="brush:php;toolbar:false">super(props);
this.state = {
  fields: {}
}
登录后复制

}

onChange(field, e){

let fields = this.state.fields;
fields[field] = e.target.value;
this.setState({fields});
登录后复制

}

render() {

return(
  <div>
    <input
      value={this.state.fields["name"]}
      onChange={this.onChange.bind(this, "name")}
      type="text"
      placeholder="Name *"
    />
  </div>
)
登录后复制

}
}

在此示例中,“name”输入不受控制,因为其值最初未定义 (this.state. fields["name"]),允许用户自由更改。但是,当用户输入值时,onChange 处理程序会设置 this.state.fields.name,从而有效地将输入转换为受控状态。此状态转变会触发警告。

解决问题

要解决警告,您可以:

  1. 定义状态中的初始字段:为每个字段声明 this.state.fields 并使用空字符串。这确保了所有输入最初都受到控制。

    <code class="python">class MyComponent extends React.Component {
      constructor(props) {
     super(props);
     this.state = {
       fields: {
         name: '',
       }
     }
      }
    
      // ...
    }</code>
    登录后复制
  2. 使用短路评估:使用短路评估分配 value 属性,这确保未定义值的计算结果为空字符串。

    <code class="python">value={this.state.fields.name || ''}</code>
    登录后复制

通过实施任一解决方案,您都可以消除错误并确保输入控制状态的一致性。

以上是为什么我在 ReactJS 应用程序中收到'组件正在更改要控制的文本类型的不受控制的输入”警告?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板