Как заставить реагирующую форму работать с несколькими формами на одной странице? - PullRequest
5 голосов
/ 18 февраля 2020

Я использую форму реагирования в моем проекте, и у меня есть 2 совершенно разные формы, но когда я отправляю одну из форм и если требуются некоторые поля в другой форме, я не могу отправить текущую форму, проверьте демо и попробуйте отправить одну из форм, формы должны работать независимо друг от друга, но похоже, что они зависят друг от друга.

любая помощь, пожалуйста?

1 Ответ

2 голосов
/ 18 февраля 2020

Добро пожаловать в StackOverflow @webcoder. Вы используете один и тот же экземпляр обработчика для обеих форм. Вам придется повторно использовать с разными именами.

import React from "react";
import ReactDOM from "react-dom";
import { useForm } from "react-hook-form";

import "./styles.css";

function App() {
  const { register, errors, handleSubmit } = useForm({
    mode: "onBlur"
  });

  const {
    register: register2,
    errors: errors2,
    handleSubmit: handleSubmit2
  } = useForm({
    mode: "onBlur"
  });

  const onSubmit = data => {
    alert(JSON.stringify(data));
  };

  const onSubmitEmail = data => {
    alert(JSON.stringify(data));
  };

  return (
    <div className="App">
      <form key={1} onSubmit={handleSubmit(onSubmit)}>
        <div>
          <label htmlFor="firstName">First Name</label>
          <input
            name="firstName"
            placeholder="bill"
            ref={register({ required: true })}
          />
          {errors.firstName && <p>This is required</p>}
        </div>

        <div>
          <label htmlFor="lastName">Last Name</label>
          <input
            name="lastName"
            placeholder="luo"
            ref={register({ required: true })}
          />
          {errors.lastName && <p>This is required</p>}
        </div>
        <input type="submit" />
      </form>

      <form key={2} onSubmit={handleSubmit2(onSubmitEmail)}>
        <div>
          <label htmlFor="email" placeholder="bluebill1049@hotmail.com">
            Email
          </label>
          <input name="email" ref={register2({ required: true })} />
          {errors2.email && <p>This is required</p>}
        </div>
        <input type="submit" />
      </form>
    </div>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...