简体   繁体   English

EmailJs 和表单验证问题,React

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM