我不知道你是什么意思,但我知道你想用另一个小函数来分解你的主函数,对吧?如果这对您没有帮助,请将完整的代码放在这里以便更好地分析。
代码
// Validations
isValidEmail = (emailValue) => {
return typeof emailValue === 'string' &&
emailValue.length >= 1 &&
validator.isEmail(emailValue);
}
isValidPassword = (password) => {
const pattern = RegExp("^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}");
return typeof password === 'string' &&
password.length >= 1 &&
pattern.test(password);
}
// updates
updateEmail = (name, email) => {
if (isValidEmail(email)) {
this.setState({
[e.target.name]: {
...this.state[e.target.name],
validation: true,
value: e.target.value
}
},
() => {
let validatePassword = this.state.password.validation;
let validateEmail = this.state.email.validation;
if(validateEmail && validatePassword) {
this.setState({validateForm: true,
nameSubmit:"onSubmit"});
console.log("state email: ", this.state)
}
}
);
return;
}
this.setState({
[e.target.name]: {
...this.state[name],
validation: false,
},
nameSubmit:"offSubmit",
validateForm: false
});
}
updatePassword = (name, password) => {
if (this.isValidPassword(password)) {
this.setState({
[e.target.name]: {
...this.state[name],
validaition: true,
value,
}
},
() => {
let validatePassword = this.state.password.validation;
let validateEmail = this.state.email.validation;
if(validateEmail && validatePassword) {
this.setState({validateForm: true, nameSubmit:"onSubmit"});
console.log("state password : ", this.state);
}
});
return;
}
this.setState({
[e.target.name]: {
...this.state[name],
validaition: false,
},
nameSubmit:"offSubmit",
validateForm: false
});
}
// main fuction
handleChange = (e) => {
e.preventDefault();
const { name, value } = e.target;
if (name === "email" ) this.updateEmail(name, value.trim())
if (name === "password") this.updatePassword(name, value.trim())
}
因此,首先,我将验证硬代码重构为一个调用
isValidEmail
isValidPassword
.
handleChange
每个的内容
if
一个叫做
updatedEmail
和
updatePassword
我用
return
里面
如果
else
另一件事,我用
spread
而不是
Object.assign
最后,我调用了传递它所需要的(名称和值)的方法;
希望对你有帮助;)