reactjs - React Bootstrap,通过 React Hooks 提交表单
问题描述
我有一个包含在功能组件中的 React-Bootstrap 表单,我希望提交这个表单并让它的onSubmit
事件由组件处理。
但是,我无法弄清楚useRef
,createRef
或forwardRef
用于submit
在表单上适当调用 的组合:
登录表单.js
const LoginForm = (props) => {
const onSubmit = (e) => {
e.preventDefault()
}
return (
<Form onSubmit={onSubmit} className="form-custom-margin">
//...
</Form>
)
}
export default LoginForm;
MyModal.js
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>
)
}
解决方案
我会采用这种方法,利用 html5 中的 form 属性
在表格上:
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 函数作为道具,您可以这样做:
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>
</>
);
}
这里最重要的部分是我们正在为我们将传递一个 prop 的表单的 onSubmit 处理程序创建一个回调。其次请注意,模态页脚有一个带有表单属性的按钮,在这种情况下,它将引用您在表单组件上添加的表单 id 属性。
这是一个快速沙箱,如果您想查看它的实际效果: https ://codesandbox.io/s/nervous-banzai-oockb
推荐阅读
- acumatica - 我在自定义中得到 System.MissingMethodException .ctor
- reactjs - antd-jalali-moment react中datepicker箭头键反应的问题
- xamarin - 即使将 5 作为最低版本,应用程序也没有安装在 Andorid 6 中
- reactjs - 使用 React.lazy() 时开发构建崩溃
- javascript - vue 插件抛出错误 Uncaught SyntaxError: Unexpected token {
- sql - 分层数据的SQL历史表设计
- html - Google 智能镜头的 HTML 锚链接
- php - 如何计算具有相同 id 的多行的时间差并将它们相加以给出使用的总时间?
- testing - 如何在 RenderFlex 溢出异常中使“颤振驱动”失败?
- c# - Xbim.Geometry.Engine.Interop.dll 中的 System.IO.FileLoadException 程序 [12796] 已退出,代码为 -1073741819 (0xc0000005) '访问冲突'