React.js:表单操作方法和onSubmit

iam*_*ham 6 javascript forms reactjs

我遇到需要提交表格的情况。当我使用这种方法1

Method 1

<form action="my_redirect_url" method="post" onSubmit={this.registerEmail.bind(this)}>
   <input
     type="text"
     placeholder='Email address'
     name='EMAIL'
     value={this.state.email}
     onChange={this.handleChangeEmail}
   />
   <button type='submit' />
</form>
Run Code Online (Sandbox Code Playgroud)

然后,表单提交完美,但是我错过了表单验证,即电子邮件验证部分。其有效与否,该表单重定向

Method 2

// onSubmit method
registerEmail = (e) => {
  e.preventDefault();
  let { email } = this.state;
  let emailValidated = validateEmail(email);
  if (emailValidated) {
    fetch('my_redirect_url', {
      method: 'post',
      body : JSON.stringify({
        EMAIL: email
      }),
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      }
    })
    .then(ParseJSON) // It parses the output
    .catch(function(error) {
      console.log("error---", error)
    });
  } else {
    alert("invalid email")
  }
}

// Form
<form onSubmit={this.registerEmail.bind(this)}>
   <input
     type="text"
     placeholder='Email address'
     name='EMAIL'
     value={this.state.email}
     onChange={this.handleChangeEmail}
   />
   <button type='submit' />
</form>
Run Code Online (Sandbox Code Playgroud)

在方法2中,验证已正确完成,但随后没有重定向并显示错误消息 Fetch api cannot load 'my_redirect_url' Response for preflight is invalid (redirect)

那么问题是什么,如何解决呢?

mar*_*pme 7

如果您告诉程序e.preventDefault(),那么他将不会执行我们都在等待的正常重定向。

因此,反之亦然,您必须将其删除才能在之后重定向用户。仅preventDefault()当电子邮件不正确时。