提交按钮重新加载页面

Submit button reloads the page

我正在处理一个登录表单,我遇到了一个奇怪的行为,每当我点击 'Login' 按钮时,页面就会重新加载,而无需通过 [=19] 登录我的电子邮件和密码=] 功能。 下面是表格的代码(我删除了很多额外的 CSS 格式和 div's)。 这是表格的屏幕截图:

loginForm

import React from 'react'
import { useState, useEffect } from "react";
import { useDispatch, useSelector } from "react-redux";
import { login } from "../../../actions/userActions";
import { Form, Button, Row, Col } from "react-bootstrap";

function LoginForm ({history}) {

    const [email, setEmail] = useState("");
    const [password, setPassword] = useState("");

    const submitHandler = (e) => {
      e.preventDefault();
      console.log(email, password)
      // dispatch(login(email, password));
    };

   
    return (
       <form>              
              <button onSubmit={submitHandler} type="submit">
            Login
          </button>              
              </form>
 
    )
}

export default LoginForm

有谁知道为什么点击登录按钮后页面会重新加载?

问题

按钮属于 type="submit",但表单没有 onSubmit 处理程序,因此采用默认表单操作,即提交表单并重新加载页面。

解决方案

onSubmit 移动到 form 元素,这样回调可以阻止默认表单操作的发生。

<form onSubmit={submitHandler}>              
  <button type="submit">
    Login
  </button>              
</form>

尝试在表单而不是按钮上使用 onSubmit 调用 submitHandler。

您还可以将按钮 type="" 方法提供程序 submit 转换为 button,在某些情况下您真的不想提交内部表单,所以请记住。

这是例子,

<form>    
  <button onSubmit={submitHandler} type="button">
</form>

其他答案也可以,但我想从不同的角度来探讨。