当前位置: 首页 > 知识库问答 >
问题:

一个组件正在更改要控制的电子邮件类型的未控制输入。输入元素不应从非受控切换到受控

沈畅
2023-03-14

我得到了这个错误,我是新的反应。我看过其他帖子,但仍然不能解决这个问题。我们将不胜感激。谢谢

警告:组件正在更改要控制的电子邮件类型的未控制输入。输入元素不应该从不受控制切换到受控制(反之亦然)。决定在组件的生存期内使用受控还是不受控的输入元素。更多信息在输入(由编辑创建)中,在div(由编辑创建)中,在div(由编辑创建)中,在窗体(由编辑创建)中,在div(由编辑创建)中

import React from 'react'
import ReactDom from 'react-dom'

export default class Edit extends React.Component{
    constructor(){
        super();
        this.state={
            name: '',
            email: '',
            password: '',
        };

    }

componentWillMount(){
    let id=this.props.id;
    axios.get('/api/users/'+id).then(response => {
        var user= response.data;

        this.setState({
            name: user.name,
            email: user.email,
        })
    }).catch(error => {
        console.log(error)
    })
}

handleNameChange(e){
    this.setState({
        name: e.target.value
    })
}

handleEmailChange(e){
    this.setState({
        email: e.target.value
    })
}

handlePasswordChange(e){
    this.setState({
        password: e.target.value
    })
}

handleSubmit(e){
    e.preventDefault();
    console.log(this.state)

    axios.post('/api/users',this.state).then(response => {
        console.log(response)
    }).then(error => {
        console.log(error)
    })
}

    render(){
        return(
            <div> 
            <h2> Add New User </h2>


            <form className="form-horizontal" onSubmit={this.handleSubmit.bind(this)}>
                 <div className="form-group">
                    <label className="control-label col-sm-2" htmlFor="email">Name:</label>
                    <div className="col-sm-10">
                      <input type="text" className="form-control" id="name" placeholder="Enter name" value={this.state.name}
                       onChange={ this.handleNameChange.bind(this) }/>
                    </div>
                  </div>

                  <div className="form-group">
                    <label className="control-label col-sm-2" htmlFor="email">Email:</label>
                    <div className="col-sm-10">
                      <input type="email" className="form-control" id="email" placeholder="Enter email" value={this.state.email}
                       onChange={ this.handleEmailChange.bind(this) }/>
                    </div>
                  </div>

                   <div className="form-group">
                    <label className="control-label col-sm-2" htmlFor="email">Password:</label>
                    <div className="col-sm-10">
                      <input type="password" className="form-control" id="password" placeholder="Enter password" value={this.state.password}
                        onChange={ this.handlePasswordChange.bind(this) }/>
                    </div>
                  </div>

                <div className="form-group">
                    <button type="submit" className="btn btn-default">Update</button>   
                </div>


        </form>

        </div>
            )
        }
}

if (document.getElementById('edit')) {
    var id=$("#edit").data("id");
ReactDom.render(<Edit id={id}/>, document.getElementById('edit'))
}

共有1个答案

屠华辉
2023-03-14

您使用value属性来设置呈现时的默认值,它使您的输入受到控制,然后在更新状态时,您试图再次更改输入值,这将使其不受控制。基本上,为了使代码成功,您需要在呈现的代码中使用defaultValue属性,而不是值ATTR。因为当您将值设置为从html输入时,以后不能更改它。

对输入元素执行以下操作:

<input type="email" className="form-control" id="email" placeholder="Enter email" defaultValue={this.state.email} />

以下是react文档中关于问题的一个来源:

https://reactjs.org/docs/uncontroll-components.html

 类似资料:
  • 我一直有这个错误:一个组件正在将受控输入的类型文本更改为不受控制。输入元件不应从受控切换到不受控(反之亦然)。决定在组件的生命周期内使用受控或不受控制的输入元件。当我尝试将值从数据库输入框点击编辑 这是我的代码:

  • 我试图摆脱这个错误信息,但仍然没有成功。 还有Facebook页面的链接,但我仍然不知道该如何找到它。 在输入似乎总是一个非空值,我如何解决这个问题?

  • 我正在对我的组件进行排序 我在选择标记中有一个错误。获取错误props.filters.sortby的值最初是日期。当我试图从下拉列表中更改它时,错误发生了。

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

  • 问题内容: 我有一个简单的react组件,其形式相信可以控制一个输入: 运行我的应用程序时,出现以下警告: 警告:MyForm正在更改要控制的文本类型的不受控制的输入。输入元素不应从不受控制切换为受控制(反之亦然)。确定在组件的使用寿命中使用受控或非受控输入元素 我相信我的输入是有价值的,因此受到控制。我想知道我在做什么错? 我正在使用React 15.1.0 问题答案: 我相信我的输入是有价值的