如何在 React 中调用单个模态框组件?

How to call an individual modal box component in react?

我想 open/load 反应 bootstrap 模型框组件 (Modalbox.js) 到 App.js,但是模态框打开按钮代码在 App.js , 怎么做?请帮忙。 在App.js中,将有多个按钮用于调用多种类型的模态框。 modalbox.js 应该只包含模态框代码。模式启动按钮应该在 App.js

<button variant="primary" onClick={handleShow}>Launch demo modal</button>

https://codesandbox.io/s/individual-modal-box-component-ti6ugg

您应该在 App.js 中创建一个名为“showModal”的布尔值状态。将该状态作为 props 传递给 Modal。同样在您的 handleshow 函数中,您应该基于 prevState 设置状态,如下所示:setShowModal((prevState)=> !prevState)。在您的模态组件中,您应该使用您传递的 showModal 道具,但请记住永远不要将道具用作 useStates 中的默认值。

我只在节目中添加了功能,这里隐藏的是代码,这样您就可以得到想法道具并相应地管理状态所有剩余的代码,您可以随意添加更多功能和客户状态

    import "./styles.css";
    import Modalbox from "./Modalbox";
    import { useState } from "react";
    export default function App() {
    const[handleShow,sethandleShow] = useState(false)
  return (
<div className="App">
  <button variant="primary" onClick={()=>sethandleShow(!handleShow)}>
    Launch demo modal
  </button>
 <Modalbox handleShow={handleShow} sethandleShow={sethandleShow} />
</div>
 );
}

modalbox.js

   import React, { useState } from "react";
  import { Modal, Button } from "react-bootstrap";

  function Modalbox(props) {
  const [modalshow, setShow] = useState(false);
  const handleClose = () => setShow(false);
  const handleShow = () => setShow(true);

   return (
<div>
  {/* <Modal show={modalshow} onHide={handleClose}> */}
  <Modal show={props.handleShow} onHide={()=>props.sethandleShow(!props.handleShow)}>
    <Modal.Header closeButton>
      <Modal.Title>Modal heading</Modal.Title>
    </Modal.Header>
    <Modal.Body>Woohoo, you're reading this text in a modal!</Modal.Body>
    <Modal.Footer>
      <Button variant="secondary" onClick={()=>props.sethandleShow(!props.handleShow)}>
        Close
      </Button>
      <Button variant="primary" onClick={handleClose}>
        Save Changes
      </Button>
    </Modal.Footer>
  </Modal>
</div>
  );
 }

 export default Modalbox;

你把显示Modalbox的状态放在里面,但它从外面不知道什么时候显示。恐怕您至少必须将显示状态设置为 App.js。剩下的逻辑可以保留在Modalbox.js.

我分叉了你的 condesandbox:

https://codesandbox.io/s/individual-modal-box-component-forked-moy9ok

另一种可能性是使用 Context API 并可能为其编写一个挂钩。那么你就不需要直接将状态传递给 Modalbox。但它并不是真正适合 Context API 的用例。而是用于螺旋钻井。