React Native:如果有条件,则处理电子邮件验证的建议



我在这个Register屏幕上有一个handleSubmit()功能,据说它正在处理电子邮件验证,即确保电子邮件的格式正确,但我没有看到。

_handleSubmit = () => {
console.log("Register.js line 69: ", this.props.email);
if (this.props.email) {
Keyboard.dismiss();
this.setState({ displaySpinner: true });
this.props
.submitVerificationEmail(this.props)
.then(exists => {
if (exists) {
if (this.props.registeredUser.Credentials.IsPasswordSet) {
this.setState({ displaySpinner: false });
//eslint-disable-next-line
this.props.navigation.navigate("RegisterEmailPassword");
} else {
this.props.handlePasswordReset(this.props.email).then(() => {
this.setState({ displaySpinner: false });
// this key means the user registration triggered the password recovery link
LocalStorage.save("USER_RESET_PASSWORD_RESET_BY_SYSTEM", true);
//eslint-disable-next-line
this.props.navigation.navigate("ResetLinkConfirmationAlert", {
fromSystem: true
});
});
}
} else {
this.setState({ displaySpinner: false });
//eslint-disable-next-line
this.props.navigation.navigate("RegisterNoEmail");
}
})
.catch(error => {
Alert.alert(
"Error",
error,
[
{
text: "OK",
onPress: () => this.setState({ displaySpinner: false })
}
],
{ cancelable: false }
);
});
} else {
Alert.alert(
"Invalid Email",
"Please enter a valid email.",
[
{
text: "OK",
onPress: () => this.setState({ displaySpinner: false })
}
],
{ cancelable: false }
);
}
};

在我看来,它只是在处理注册到端点时提供的任何电子邮件。我相信,如果我能在if (this.props.email) {中添加某种类型的===,它就会解决问题,但我还没能添加任何不会返回未定义的内容。有什么建议或更好的解决方案吗?

你可能认为submitVerificationEmail(this.props)正在处理电子邮件的验证,但我也没有在动作创建者中看到它:

export function submitVerificationEmail({ email }) {
return async dispatch => {
try {
dispatch(resetVerifications());
dispatch({ type: types.EMAIL_VERIFICATION_SUBMIT_STARTED });
dispatch({ type: types.RESET_LOGIN_STATE });
const url = `${endpoints.v2.INDIVIDUALS}?email=${email}`;
console.log("registrationAction line 22: ", url);
const userExists = await requester.sendGet(url);
console.log("registrationAction line 24: ", userExists);
if (userExists) {
dispatch({
type: types.EMAIL_VERIFICATION_SUBMIT_ENDED_SUCCESS,
payload: userExists
});
dispatch(setEmailField(email));
return Promise.resolve(true);
}
return Promise.resolve(false);
} catch (error) {
dispatch({
type: types.EMAIL_VERIFICATION_SUBMIT_ENDED_ERROR,
payload: error
});
if (error.Code === 6099) {
return Promise.resolve(false);
}
return Promise.reject("Please enter a valid email address.");
}
};
}

这似乎在Android和iOS上都适用:

_handleSubmit = () => {
console.log("Register.js line 69: ", this.props.email);
const reg = /^w+([.-]?w+)*@w+([.-]?w+)*(.w{2,3})+$/;
if (reg.test(this.props.email) === true) {
Keyboard.dismiss();
this.setState({ displaySpinner: true });
this.props
.submitVerificationEmail(this.props)
.then(exists => {
if (exists) {
if (this.props.registeredUser.Credentials.IsPasswordSet) {
this.setState({ displaySpinner: false });
//eslint-disable-next-line
this.props.navigation.navigate("RegisterEmailPassword");
} else {
this.props.handlePasswordReset(this.props.email).then(() => {
this.setState({ displaySpinner: false });
// this key means the user registration triggered the password recovery link
LocalStorage.save("USER_RESET_PASSWORD_RESET_BY_SYSTEM", true);
//eslint-disable-next-line
this.props.navigation.navigate("ResetLinkConfirmationAlert", {
fromSystem: true
});
});
}
} else {
this.setState({ displaySpinner: false });
//eslint-disable-next-line
this.props.navigation.navigate("RegisterNoEmail");
}
})
.catch(error => {
Alert.alert(
"Error",
error,
[
{
text: "OK",
onPress: () => this.setState({ displaySpinner: false })
}
],
{ cancelable: false }
);
});
} else {
Alert.alert(
"Invalid Email",
"Please enter a valid email.",
[
{
text: "OK",
onPress: () => this.setState({ displaySpinner: false })
}
],
{ cancelable: false }
);
}
};

最新更新