react-модальный загрузчик с формой отправки без работы

#reactjs #react-bootstrap #react-hook-form

Вопрос:

Я пытаюсь создать модал с помощью react-bootstrap

реагировать-крючок-форма с полноэкранным модальным без РАБОТЫ с формой

Но, когда я добавляю форму, модальный режим неправильно работает в полноэкранном режиме.

реагировать-крючок-форма с полноэкранным модальным без формы НЕ РАБОТАЕТ

Я думаю, что проблема в том, где найти форму, чтобы она правильно печаталась в html

Спасибо!

Ответ №1:

Просто переместитесь Form в Modal.Body :

 import React, { useRef, useState } from "react";
import { Button, Col, Form, Modal } from "react-bootstrap";
import { useForm } from "react-hook-form";
import "bootstrap/dist/css/bootstrap.min.css";

export default function App() {
  const [show, setShow] = useState(false);
  const formRef = useRef();
  const {
    register,
    setValue,
    // handleSubmit,
    watch,
    formState: { errors },
    reset
  } = useForm({
    mode: "onChange"
  });

  function handleShow(breakpoint) {
    setShow(true);
  }

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

  const onSubmitClick = () => {
    formRef.current.submit();
  };

  return (
    <>
      <Button className="me-2" onClick={() => handleShow("sm-down")}>
        Full screen
      </Button>
      <Modal show={show} fullscreen={true} onHide={() => setShow(false)}>
        <Modal.Header closeButton>
          <Modal.Title>Modal</Modal.Title>
        </Modal.Header>
        <Modal.Body>
          <Form
            ref={formRef}
            // onSubmit={handleSubmit(onSubmit)}
          >
            <Form.Group as={Col} xs={12} sm={6} className="mb-3">
              <Form.Label>Fecha</Form.Label>
              <Form.Control
                {...register("fecha", { required: true })}
                isInvalid={errors?.fecha}
              />
            </Form.Group>
            <p>
              Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
              eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
              enim ad minim veniam, quis nostrud exercitation ullamco laboris
              nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
              reprehenderit in voluptate velit esse cillum dolore eu fugiat
              nulla pariatur. Excepteur sint occaecat cupidatat non proident,
              sunt in culpa qui officia deserunt mollit anim id est laborum.
            </p>
            <p>
              Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
              eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
              enim ad minim veniam, quis nostrud exercitation ullamco laboris
              nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
              reprehenderit in voluptate velit esse cillum dolore eu fugiat
              nulla pariatur. Excepteur sint occaecat cupidatat non proident,
              sunt in culpa qui officia deserunt mollit anim id est laborum.
            </p>
            <p>
              Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
              eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
              enim ad minim veniam, quis nostrud exercitation ullamco laboris
              nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
              reprehenderit in voluptate velit esse cillum dolore eu fugiat
              nulla pariatur. Excepteur sint occaecat cupidatat non proident,
              sunt in culpa qui officia deserunt mollit anim id est laborum.
            </p>
            <p>
              Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
              eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
              enim ad minim veniam, quis nostrud exercitation ullamco laboris
              nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
              reprehenderit in voluptate velit esse cillum dolore eu fugiat
              nulla pariatur. Excepteur sint occaecat cupidatat non proident,
              sunt in culpa qui officia deserunt mollit anim id est laborum.
            </p>
            <p>
              Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
              eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
              enim ad minim veniam, quis nostrud exercitation ullamco laboris
              nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
              reprehenderit in voluptate velit esse cillum dolore eu fugiat
              nulla pariatur. Excepteur sint occaecat cupidatat non proident,
              sunt in culpa qui officia deserunt mollit anim id est laborum.
            </p>
            <p>
              Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
              eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
              enim ad minim veniam, quis nostrud exercitation ullamco laboris
              nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
              reprehenderit in voluptate velit esse cillum dolore eu fugiat
              nulla pariatur. Excepteur sint occaecat cupidatat non proident,
              sunt in culpa qui officia deserunt mollit anim id est laborum.
            </p>
            <Form.Group as={Col} xs={12} sm={6} className="mb-3">
              <Form.Label>Monto</Form.Label>
              <Form.Control
                {...register("monto", { required: true })}
                isInvalid={errors?.monto}
              />
            </Form.Group>
          </Form>
        </Modal.Body>
        <Modal.Footer>
          <Button onClick={onSubmitClick} type="submit" variant="success">
            Enviar
          </Button>
        </Modal.Footer>
      </Modal>
    </>
  );
}
 

Редактировать реакцию-начальная загрузка-модальная-полноэкранная-форма-отправка-не работает (раздвоенная)

Комментарии:

1. Привет, как я мог запустить отправку ?, Модальный. Нижний колонтитул находится за пределами формы, спасибо за ответ

2. @Kamousagi Ты можешь использовать useRef крючок. Я обновил код в codesandbox . Пожалуйста, проверьте это еще раз.