【发布时间】:2021-06-10 12:47:48
【问题描述】:
const MIN_LENGTH = 6;
class Login extends React.Component {
constructor() {
super();
this.state = {
email: '',
password: '',
emailValid: false,
passwordValid: false,
// redirect: false,
};
this.handleEmail = this.handleEmail.bind(this);
this.handlePassword = this.handlePassword.bind(this);
this.handleClick = this.handleClick.bind(this);
}
componentDidUpdate() {
this.handleButton();
}
handleEmail(ev) {
const email = ev.target.value;
const re = /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
const isValid = re.test(email);
if (isValid) {
this.setState({ emailValid: true, email });
} else {
this.setState({ emailValid: false, email: '' });
}
}
handlePassword(ev) {
const size = ev.target.value.length;
if (size >= MIN_LENGTH) {
this.setState({ passwordValid: true, password: ev.target.value });
} else {
this.setState({ passwordValid: false, password: '' });
}
}
handleButton() {
const { emailValid, passwordValid } = this.state;
const btn = document.getElementById('btnLogin');
if (emailValid && passwordValid) {
btn.disabled = false;
} else {
btn.disabled = true;
}
}
handleClick(ev) {
console.log(ev);
ev.preventDefault();
console.log('click!');
}
render() {
const { email, password, emailValid, passwordValid } = this.state;
if (emailValid && passwordValid) {
console.log(`Email:${email}\nSenha:${password}`);
}
return (
<section>
<label htmlFor="email-input">
Email
<input type="email" data-testid="email-input" onChange={ this.handleEmail } />
</label>
<br />
<label htmlFor="password-input">
Password
<input
type="password"
data-testid="password-input"
onChange={ this.handlePassword }
/>
</label>
<br />
<button
type="button"
id="btnLogin"
onClick={ this.handleClick }
disabled
>
Login
</button>
</section>
);
}
}
export default Login;
上面的代码是一个 React 组件,它将登录我的应用程序。重要的是要说验证工作正常,该按钮仅在一切顺利时才启用,但是单击按钮时没有任何反应。“handleEmail”功能具有通过正则表达式验证电子邮件有效性的作用,并且email 仅在组件状态有效时才会更改。 “handlePassword”函数仅检查输入的密码是否大于或等于 6。我将此信息存储在组件的状态中,但想法是将来使用“Redux”将此数据保存在全局状态中。我现在唯一的问题是按钮的 onClick 错误。
【问题讨论】:
-
尝试完全删除“禁用”属性,这是您所期望的吗?对于 JSX,“禁用”与“禁用={true}”相同。
-
如果你仔细看,在“handleButton”函数中这正是我所做的,按钮是启用的,但是当你点击时,什么都没有发生。
标签: javascript html reactjs dom-events mouseevent