javascript - 组件正在将电子邮件类型的不受控制的输入更改为受控制。输入元素不应从不受控切换到受控

标签 javascript reactjs

我收到此错误,我是 react 新手。我看过其他帖子,但仍然无法解决问题。帮助将不胜感激。谢谢

Warning: A component is changing an uncontrolled input of type email to be controlled. Input elements should not switch from uncontrolled to controlled (or vice versa). Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info in input (created by Edit) in div (created by Edit) in div (created by Edit) in form (created by Edit) in div (created by Edit) in Edit

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'))
}

最佳答案

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

为您的输入元素执行此操作:

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

这是有关问题的 React 文档的来源:

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

关于javascript - 组件正在将电子邮件类型的不受控制的输入更改为受控制。输入元素不应从不受控切换到受控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49365697/

相关文章:

javascript - React 中的 "updating"是什么?

reactjs - 无效状态错误 : Failed to execute 'stop' on 'MediaRecorder' : The MediaRecorder's state is 'inactive'

javascript - Node.js:文件上传 API 和 JSON 返回

javascript - 'el' 在 vi​​ew.render().el 中做了什么?

javascript - 防止函数在外部作用域中查找变量

javascript - 使用 React 查询小型天气应用程序的字符串

css - React JS react-bootstrap PopOver 使用 className 更改不同按钮的背景颜色

javascript - 经过一番尝试后禁用单选按钮并分别更改表单

javascript - 从 Sketch 到 React Js 有哪些可用选项?

javascript - 在 Hooks React 中使用静态变量