OnClick на кнопку отправки, всплывающее окно должно отображаться с сообщением об ошибке в React Hooks - PullRequest
0 голосов
/ 16 января 2020

У меня есть три поля, поэтому, если нажать кнопку «Отправить», в React Hooks должно появиться всплывающее окно с сообщением об ошибке. В настоящее время я просто работаю с "Is-Invalid", чтобы показать пользователю, что он заполнит детали. Мне нужно всплывающее окно при отправке для отображения ошибок. Вот код

import React from "react";
import { useForm } from "./Hook";

export default function Form() {
  const validateForms = values => {
    let errors = {};
    let emailPattern = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
    if (values.firstName === "") {
      errors.firstName = "First Name is required";
    }
    if (values.lastName === "") {
      errors.lastName = "First Name is required";
    }
    if (values.email === "") {
      errors.email = "email Is required";
    } else {
      if (emailPattern.test(values.email) === false) {
        errors.email = "email Is required";
      }
    }

    return errors;
  };
  const addUser = () => {
    console.log("addUser called");
  };
  const { errors, values, onFormChange, onFormSubmit } = useForm(
    addUser,
    {
      firstName: "",
      lastName: "",
      email: ""
    },
    validateForms
  );

  return (
    <div className="container">
      <form>
        <div className="form-group">
          <label htmlFor="firstName">Email address</label>
          <input
            type="email"
            className={`form-control ${errors.firstName && "is-invalid"}`}
            value={values.firstName}
            name="firstName"
            onChange={e => {
              onFormChange(e);
            }}
          />
        </div>
        <div className="form-group">
          <label htmlFor="lastName">Last Name</label>
          <input type="text" className={`form-control ${errors.lastName && "is-invalid"}`} 
              name="lastName"
            value={values.lastName}
            onChange={e => {
              onFormChange(e);
            }}
          />
        </div>

        <div className="form-group">
          <label htmlFor="lastName">Email</label>
          <input type="text" className={`form-control ${errors.email && "is-invalid"}`} name="email"
            value={values.email}
            onChange={e => {
              onFormChange(e);
            }}
          />
        </div>
        <button type="button" className="btn btn-primary" onClick={e => {onFormSubmit(e);}} >
          Submit  </button>
       </form>
    </div>
  );
}

У меня есть три поля, поэтому, если нажать кнопку «Отправить», в React Hooks должно появиться всплывающее окно с сообщением об ошибке. В настоящее время я просто работаю с "Is-Invalid", чтобы показать пользователю, чтобы он заполнил детали. Мне нужно всплывающее окно при отправке для отображения ошибок. Вот код

import { useState } from "react";

export const useForm = (callback, initialState, validation) => {
  const [values, setValues] = useState({
    firstName: "",
    lastName: "",
    email: ""
  });
  const [errors, setErrros] = useState({});

  const onFormChange = e => {
    setValues({ ...values, [e.target.name]: e.target.value });
  };

  const onFormSubmit = () => {
    //The following Line will get Object Return if any Errors Exist
    const valudatedObj = validation(values);
    if (Object.keys(valudatedObj).length === 0) {
      console.log(values);
      setErrros(valudatedObj);
    } else {
      setErrros(valudatedObj);
    }
  };
  return {
    values,
    errors,
    onFormChange,
    onFormSubmit
  };
};
...