首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >via,通过React提交表单

via,通过React提交表单
EN

Stack Overflow用户
提问于 2021-03-08 18:03:14
回答 1查看 2.5K关注 0票数 1

我有一个用functional包装的React表单,我希望提交这个表单,并让组件处理它的onSubmit事件。

但是,我不知道如何组合useRefcreateRefforwardRef来适当地调用表单上的submit

LoginForm.js

代码语言:javascript
复制
const LoginForm = (props) => {
    const onSubmit = (e) => {
        e.preventDefault()
    }

  return (
    <Form onSubmit={onSubmit} className="form-custom-margin">
      //...
    </Form>
  )
}

export default LoginForm;

MyModal.js

代码语言:javascript
复制
const Modal = (props) => {

  // trying to figure out how to establish a ref?

  const handleActionClick(e){
   // want to call LoginForm and "submit" the form and have `onSubmit` method run
  }

  return (
   <Modal>
     <Modal.Body>
      <LoginForm />
     <Modal.Body>
     <Modal.Footer>
      <Button variant="primary" onClick={handleActionClick}>Login</Button>
     </Modal.Footer>
   </Modal>
  )
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-08 19:54:25

我会这样做,利用html5中的form属性

在表格上:

代码语言:javascript
复制
import React from "react";

import { Form } from "react-bootstrap";

export default function LoginForm({ handleSubmit }) {
  return (
   // Remember to pass an id that will be referenced on the submit button
    <Form onSubmit={handleSubmit} id="myForm">
      { /* Your Form JSX */}
    </Form>
  );
}

既然您已经为表单分配了一个id,并且正在接受一个onSubmit函数作为支柱,那么就可以这样做了:

代码语言:javascript
复制
import React from "react";
import { Button, Modal } from "react-bootstrap";
import FormExample from "./Form";

export default function ModalExample() {
  const [show, setShow] = React.useState(false);

  const handleClose = () => setShow(false);
  const handleShow = () => setShow(true);

  // Pass this callback to the LoginForm
  const handleSubmit = (e) => {
    e.preventDefault();
    console.log("Form was submitted, now the modal can be closed");
    handleClose();
  };

  return (
    <>
      <Button variant="primary" onClick={handleShow}>
        Launch demo modal
      </Button>

      <Modal show={show} onHide={handleClose}>
        <Modal.Body>
          <LoginForm handleSubmit={handleSubmit} />
        </Modal.Body>
        <Modal.Footer>
         {/* Here the form attribute is referencing the form with the id myForm which is the LoginForm */}
          <Button variant="primary" type="submit" form="myForm">
            Login
          </Button>
        </Modal.Footer>
      </Modal>
    </>
  );
}

这里最重要的部分是,我们正在为表单的onSubmit处理程序创建一个回调,我们将传递一个道具。其次,注意模态页脚有一个带有表单属性的按钮,在本例中它将引用表单组件中添加的表单id属性。

下面是一个快速的沙箱,以防您想要看到它的作用:https://codesandbox.io/s/nervous-banzai-oockb

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66534889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档