Javascript 组件正在将电子邮件类型的非受控输入更改为受控。输入元件不应从非受控切换到受控
我犯了这个错误,我是新手。我看过其他帖子,但仍然无法解决这个问题。我们将不胜感激。谢谢 警告:组件正在将电子邮件类型的非受控输入更改为受控。输入元件不应从非受控切换到受控(反之亦然)。在组件的使用寿命内,决定使用受控或非受控输入元件。更多信息 输入中(通过编辑创建) 在div中(通过编辑创建) 在div中(通过编辑创建) 表单中(通过编辑创建) 在div中(通过编辑创建) 编辑中Javascript 组件正在将电子邮件类型的非受控输入更改为受控。输入元件不应从非受控切换到受控,javascript,reactjs,Javascript,Reactjs,我犯了这个错误,我是新手。我看过其他帖子,但仍然无法解决这个问题。我们将不胜感激。谢谢 警告:组件正在将电子邮件类型的非受控输入更改为受控。输入元件不应从非受控切换到受控(反之亦然)。在组件的使用寿命内,决定使用受控或非受控输入元件。更多信息 输入中(通过编辑创建) 在div中(通过编辑创建) 在div中(通过编辑创建) 表单中(通过编辑创建) 在div中(通过编辑创建) 编辑中 从“React”导入React 从“react dom”导入react dom 导出默认类编辑扩展React.Com
从“React”导入React
从“react dom”导入react dom
导出默认类编辑扩展React.Component{
构造函数(){
超级();
这个州={
名称:“”,
电子邮件:“”,
密码:“”,
};
}
组件willmount(){
设id=this.props.id;
get('/api/users/'+id)。然后(response=>{
var user=response.data;
这是我的国家({
name:user.name,
电子邮件:user.email,
})
}).catch(错误=>{
console.log(错误)
})
}
手形变化(e){
这是我的国家({
名称:e.target.value
})
}
handleEmailChange(电子邮件){
这是我的国家({
电子邮件:e.target.value
})
}
handlePasswordChange(e){
这是我的国家({
密码:e.target.value
})
}
handleSubmit(e){
e、 预防默认值();
console.log(this.state)
post('/api/users',this.state)。然后(response=>{
console.log(响应)
})。然后(错误=>{
console.log(错误)
})
}
render(){
返回(
添加新用户
姓名:
电邮:
密码:
使现代化
)
}
}
if(document.getElementById('edit')){
变量id=$(“#编辑”).data(“id”);
ReactDom.render(,document.getElementById('edit'))
}
发生错误是因为在componentDidMount中执行设置状态时,返回的值似乎是未定义的
if(user.name!==undefined && user.email!==undefined){
this.setState({
name: user.name,
email: undefined,
})
}
这将防止状态中的值变得未定义,并且您将不再有该错误。发生该错误是因为当您在componentDidMount内执行设置状态时,返回的值似乎是未定义的
if(user.name!==undefined && user.email!==undefined){
this.setState({
name: user.name,
email: undefined,
})
}
这将防止状态中的值变得未定义,并且您将不再存在该错误。您在渲染时使用“值”属性设置默认值,它使您的输入受控制,然后在更新状态时,您尝试再次更改输入值,这将使其不受控制。基本上,为了使代码成功,您需要在呈现的代码中使用defaultValue属性,而不是value attr。因为当您将值设置为从html输入时,以后无法更改它
对输入元素执行以下操作:
<input type="email" className="form-control" id="email" placeholder="Enter email" defaultValue={this.state.email} />
以下是react docs on issue的来源:
渲染时使用“值”属性设置默认值,使输入受控,然后在更新状态时尝试再次更改输入值,这将使输入不受控。基本上,为了使代码成功,您需要在呈现的代码中使用defaultValue属性,而不是value attr。因为当您将值设置为从html输入时,以后无法更改它
对输入元素执行以下操作:
<input type="email" className="form-control" id="email" placeholder="Enter email" defaultValue={this.state.email} />
以下是react docs on issue的来源:
很可能是e.target.value
未定义的值
或空值
?实际上我正在做crud,这是更新表单。。在componentWillMount()函数中,response.data给出了{name,email}的json响应。但是当我尝试使用user.name设置它时,它会给出错误。你知道吗?很可能,e.target.value
的值是未定义的
还是空的
?实际上我正在做crud,这是更新表单。。在componentWillMount()函数中,response.data给出了{name,email}的json响应。但是当我尝试使用user.name设置它时,它会给出错误。你知道吗?错误已经消失了,但我必须在输入字段中显示响应,但没有显示。实际上,我在做crud,这是更新表。。在componentWillMount()函数中,response.data给出了{name,email}的json响应。但是当我尝试使用user.name设置它时,它会给出错误。你知道吗?这是针对非受控部件的。他所拥有的是一个受控组件,他需要它成为一个受控组件,因为他必须稍后发布数据。错误消失了,但我必须在输入字段中显示响应,但没有显示。实际上,我在做crud,这是更新表。。在componentWillMount()函数中,response.data给出了{name,email}的json响应。但是当我尝试使用user.name设置它时,它会给出错误。你知道吗?这是针对非受控部件的。他所拥有的是一个受控组件,他需要它成为一个受控组件,因为他必须稍后发布数据。错误消失了,但我必须在输入字段中显示响应,但没有显示。实际上,我在做crud,这是更新表。。在componentWillMount()函数中,response.data给出