Почему ошибка: ev.preventDefault is not a function?

Есть компонент:

import React, { useState } from 'react';

function Login() {
    const [hand, setHand] = useState('Загрузка...');
    function submitHandler(ev) {
        ev.preventDefault();
        ev.stopPropagation();
        return function(type) {
            if (typeof type !== 'string') {
                setHand('Произошла ошибка');
                return;
            }
            if (type !== 'reg' || type !== 'log') {
                console.log(3)
            }
        }
    }
    return (
        <form className="login">
            <div className="inputs">
                <input
                    type="text"
                    placeholder="email"
                    className="email"
                />
                <input
                    type="password"
                    placeholder="пароль"
                    className="password"
                />
            </div>
            <div className="buttons">
                <button
                    onSubmit={submitHandler('reg')}
                    type="submit"
                    className="button-styled reg"
                >
                    Зарегистрироваться
                </button>
                <button
                    onSubmit={submitHandler('reg')}
                    type="submit"
                    className="button-styled log"
                >
                    Войти
                </button>
                <button
                    type="reset"
                    className="button-styled"
                >
                    Сбросить
                </button>
            </div>
        </form>
    );
}

export default Login;

При вызове выдает ошибку:

TypeError: ev.preventDefault is not a function

Как исправить?


Ответы (1 шт):

Автор решения: nörbörnën

function submitHandlerFactory(type) {
  if (typeof type !== 'string') {
    return setHand('Произошла ошибка');
  }
  return function(ev) {
    ev.preventDefault();
    ev.stopPropagation();
    console.log(`type="${type}"`);
  }
}

const fn = submitHandlerFactory('req');
fn(new Event('q'));

→ Ссылка