[英]EmailJs and Form Validation problem, React
I've got a problem with sending emails in React by EmailJs.我在通过 EmailJs 在 React 中发送电子邮件时遇到问题。 When i validate form and all the errors desapears, form is sending email only after second click and i dont really know why this is happening why.
当我验证表单并且所有错误消失时,表单仅在第二次单击后才发送 email,我真的不知道为什么会发生这种情况。 Please help
请帮忙
const useForm = (callback, validate) => { const [values, setValues] = useState({ title: "", email: "", message: "", }); const [errors, setErrors] = useState({}); const [send, setSend] = useState(false); const [isSubmiting, setIsSubmiting] = useState(false); useEffect(() => { if (Object.keys(errors).length === 0) { if (isSubmiting) { setSend(true); } } }, [errors]); const handleChange = (e) => { const { name, value } = e.target; setValues({...values, [name]: value, }); }; const handleSubmit = (e) => { e.preventDefault(); setErrors(validate(values)); setIsSubmiting(true); if (send) { emailjs.sendForm( "service", "templatekey", e.target, "userkey" ).then( (result) => { console.log(result.text); }, (error) => { console.log(error.text); } ); e.target.reset(); } }; return { handleChange, values, handleSubmit, errors }; }; export default useForm;
After moving setErrors(validate(values)) and setIsSubmiting(true) to handleChange it works fine for me:)将 setErrors(validate(values)) 和 setIsSubmiting(true) 移动到 handleChange 后,它对我来说很好:)
const handleChange = (e) => {
const { name, value } = e.target;
setValues({
...values,
[name]: value,
});
setErrors(validate(values));
setIsSubmiting(true);
}; };
const handleSubmit = (e) => {
e.preventDefault();
if (send) {
console.log("WYSYŁAM");
emailjs
.sendForm(
"service",
"template",
e.target,
"user"
)
.then(
(result) => {
console.log(result.text);
},
(error) => {
console.log(error.text);
}
);
e.target.reset();
}
}; };
return { handleChange, values, handleSubmit, errors };返回{句柄更改,值,句柄提交,错误}; };
};
I ran into the same problem and found that adding an 'onClick' event handler to your form button will prevent the user from needing to double click.我遇到了同样的问题,发现向表单按钮添加“onClick”事件处理程序会阻止用户双击。
<button onClick={handleClick}> Submit </button>
in useForm.js I moved setErrors(validate(values));
在 useForm.js 我移动了
setErrors(validate(values));
and setIsSubmitting(true);
和
setIsSubmitting(true);
into handleClick
进入
handleClick
function handleClick() {
setErrors(validate(values));
setIsSubmitting(true);
};
const handleSubmit = e => {
e.preventDefault();
if (send) {
emailjs.sendForm('service', 'templateKey', e.target, 'userKey')
.then((result) => {
console.log(result.text);
}, (error) => {
console.log(error.text);
});
callback();
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.