【发布时间】:2019-11-11 16:12:54
【问题描述】:
在我的 React 应用程序中,我在使用电子邮件输入字段的 onChange 事件期间收到此错误:
警告:一个组件正在改变一个受控输入 键入文本不受控制。输入元素不应从 受控到不受控(反之亦然)。
这是导致此警告的 onChange 块;如果我删除第一个 if 块,错误就会消失,但我当然需要它来验证电子邮件。
validateEmail(email) {
const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return re.test(email);
}
handleOnChange = e => {
const { name, value } = e.target;
const emailInput = e.target.value;
const emailValid = this.validateEmail(emailInput);
if (name === 'email') {
this.setState({
inputs: {
email: emailInput,
},
errors: {
email: !emailValid,
},
});
} else {
this.setState({
inputs: {
...this.state.inputs,
[name]: value,
},
errors: {
...this.state.errors,
[name]: false,
},
});
}
};
状态:
constructor() {
super();
this.state = {
inputs: {
name: '',
email: '',
message: '',
},
phone: '',
show: true,
errors: {
name: false,
email: false,
message: false,
},
};
}
如何保留当前代码并解决警告?
【问题讨论】:
-
在下面尝试我的解决方案。让我知道这是否可以解决问题:)
标签: javascript reactjs input