簡體   English   中英

React + Ant 設計登錄表單 e.preventDefault 不是 function

[英]React + Ant design login form e.preventDefault is not a function

我一直在嘗試使用 Ant Desing forms 來實現登錄頁面功能。

我不斷收到以下錯誤

我嘗試檢查所有分號,看看這是否是由於缺少分號,但無法找到根本原因。

TypeError: e.preventDefault is not a function
at onSubmit (LoginForm.js:27) 
at onFinish (LoginForm.js:44)
at onFinish (Form.js:73)
at useForm.js:811 

這是我的登錄頁面代碼。

import React, {useState} from 'react';
import {Link, Redirect} from 'react-router-dom';
import {connect} from 'react-redux';
import PropTypes from 'prop-types';
import styles from './NormalLoginForm.css';
import { Form, Input, Button, Checkbox, Layout, Card } from 'antd';
import { UserOutlined, LockOutlined } from '@ant-design/icons';
import {login} from '../auth/actions/auth';

const NormalLoginForm = ({ login, isAuthenticated }) => {

    const [formData, setFormData] = useState({
        username: '',
        password:''
    });
    const { username, password} = formData;

    const onChange = e => setFormData({...formData, [e.target.name]: e.target.value});

    const onFinish = (values) => {

        console.log('Received values of form  onFinish: ', values);
        // login(username,password)
    };

    const onSubmit = e => {
        e.preventDefault();

        console.log('Received values of form(onSumbit):' );

        login(username,password);
    };

    if (isAuthenticated)
        return <Redirect to='/' />;

    return (
        <Form
            name="normal_login"
            className="login-form"
            initialValues={{
                remember: true,
            }}
            onFinish={e=> onSubmit(e)}

            style={{ maxWidth: 300, align: 'center'}}
        >
            <Form.Item
                name="username"
                rules={[
                    {
                        required: true,
                        message: 'Please input your Username!',
                    },
                ]}
            >
                <Input prefix={<UserOutlined className="site-form-item-icon" />}
                       placeholder="Username"
                        onChange={e=> onChange(e)}
                />
            </Form.Item>
            <Form.Item
                name="password"
                rules={[
                    {
                        required: true,
                        message: 'Please input your Password!',
                    },
                ]}
            >
                <Input
                    prefix={<LockOutlined className="site-form-item-icon" />}
                    type="password"
                    placeholder="Password"
                    onChange={e => onChange(e)}
                />
            </Form.Item>
            <Form.Item>
                <Form.Item name="remember" valuePropName="checked" noStyle>
                    <Checkbox>Remember me</Checkbox>
                </Form.Item>

                <a className="login-form-forgot" href="">
                    Forgot password
                </a>
            </Form.Item>

            <Form.Item>
                <Button type="primary" htmlType="submit" className="login-form-button">
                    Log in
                </Button>
                {/*Or <a href="">register now!</a>*/}
            </Form.Item>
        </Form>
    );
};

NormalLoginForm.propTypes = {
    login: PropTypes.func.isRequired,
    isAuthenticated: PropTypes.bool
};

const mapStateToProps = state => ({
    isAuthenticated: state.auth.isAuthenticated
});

connect(mapStateToProps, { login })(NormalLoginForm);


function LoginForm () {
    return (
        <NormalLoginForm/>
    )
}

export default LoginForm; 

我在哪里犯錯? 這是我在 React 中的第一個項目,被困在這里好幾個星期了。 請幫忙。

如果要在提交表單時調用preventDefault ,請改用onSubmit處理程序。 onFinish的參數不是事件,而是

onSubmit={e => e.preventDefault()}
onFinish={onFinish}
const onFinish = (values) => { // you can remove this parameter if you don't use it
  login(username, password);
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM