反应模态提交表格

时间:2020-09-23 04:37:07

标签: reactjs react-native reactstrap

每当在我的reactstrap模态上单击“提交”按钮时,我试图打印出一个简单的单击按钮的文本,并且我的代码无法执行任何操作,不确定我的错了。 我已附上一张图片以实现更好的可视化效果,我正在使用reactstrap Modal。

import React, { useState } from "react";
import { Modal, ModalHeader, ModalBody, ModalFooter } from "reactstrap";
import Button from "./Button";

// NOTICE
// Modal is brought in with it's own trigger, so import the component where you want the trigger to be.

const ModalComponent = (props) => {
  const {
    buttonText,
    title,
    actionButtonText,
    cancelButtonText,
    children,
    className,
  } = props;

  const [modal, setModal] = useState(false);

  const toggle = () => setModal(!modal);
  const alertshow = () => {
    alert("button clicked");
  };

  const closeBtn = (
    <button className="close" onClick={toggle}>
      &times;
    </button>
  );

  return (
    <div>
      <a className="btn_link" onClick={toggle}>
        {buttonText}
      </a>
      <form onSubmit={alertshow}>
        <Modal isOpen={modal} toggle={toggle} className={className}>
          <ModalHeader className=" border-0" toggle={toggle} close={closeBtn}>
            {title}
          </ModalHeader>
          <ModalBody className="text-left border-0">
            <p className="modal-label">Please enter your email address</p>
            {children}
          </ModalBody>
          <ModalFooter className="modal-footer border-0">
            <Button className="btn_secondary modal-btn" onClick={toggle}>
              {cancelButtonText}
            </Button>{" "}
            &nbsp;&nbsp;
            <input
              className="btn btn_primary modal-btn"
              type="submit"
              value={actionButtonText}
            />
          </ModalFooter>
        </Modal>
      </form>
    </div>
  );
};

export default ModalComponent;

Image

1 个答案:

答案 0 :(得分:0)

它是form should be part of modal而不是modal should be part of form发生的。这就是为什么它不引用onSubmit。您需要这样做:

<Modal isOpen={modal} toggle={toggle} className={className}>
        <form onSubmit={alertshow}>
         ...rest all content
         </Form>
</Modal>

这里是完整代码:

import React, { useState } from "react";
import "./styles.css";

import { Modal, ModalHeader, ModalBody, ModalFooter, Button } from "reactstrap";

// NOTICE
// Modal is brought in with it's own trigger, so import the component where you want the trigger to be.

const ModalComponent = (props) => {
  const {
    buttonText,
    title,
    actionButtonText,
    cancelButtonText,
    children,
    className
  } = props;

  const [modal, setModal] = useState(false);

  const toggle = () => setModal(!modal);
  const alertshow = () => {
    alert("button clicked");
  };

  const closeBtn = (
    <button className="close" onClick={toggle}>
      &times;
    </button>
  );

  return (
    <div>
      <div onClick={toggle}>{buttonText}</div>
      <Modal isOpen={modal} toggle={toggle} className={className}>
        <form onSubmit={alertshow}>
          <ModalHeader className=" border-0" toggle={toggle} close={closeBtn}>
            {title}
          </ModalHeader>
          <ModalBody className="text-left border-0">
            <p className="modal-label">Please enter your email address</p>
            {children}
          </ModalBody>
          <ModalFooter className="modal-footer border-0">
            <Button className="btn_secondary modal-btn" onClick={toggle}>
              {cancelButtonText}
            </Button>{" "}
            &nbsp;&nbsp;
            <input
              className="btn btn_primary modal-btn"
              type="submit"
              value={actionButtonText}
            />
          </ModalFooter>
        </form>
      </Modal>
    </div>
  );
};

export default function App() {
  return (
    <div className="App">
      <ModalComponent
        title="Hello"
        cancelButtonText="Cancel"
        actionButtonText="Submit"
        buttonText="testing"
      />
    </div>
  );
}

以下是演示:https://codesandbox.io/s/fervent-bash-51lxe?file=/src/App.js:0-1826