【问题标题】:How to open Modal from another component in hooks?如何从钩子中的另一个组件打开模态?
【发布时间】:2021-05-08 17:20:04
【问题描述】:

在一个 React 项目中,我需要从另一个组件打开 Modal。我从 StackOverflow 中找到了建议的问题,但还没有被说服。因为我需要使 Modal 组件可在所有组件中重用。请参阅下面的代码以供参考

主页.js

const HomePage = () => {
  return (
    <>
      <button onClick={() => setLoginModalShow(true)}>Open Modal</button>
    </>
  );
};

我也创建了以下文件来导出其他文件,并使其在其他组件中有用

commonLogin.js

import LoginModal from "./LoginModal";

export const setLoginModalShow = (props) => {
  console.log("PROPS", props);
  return <LoginModal showModal={props} />;
};

这是模态组件

const LoginModal = (props) => {
  const [loginModalShow, setLoginModalShow] = useState(props.showModal);

  console.log("PROPS in MODAL", props);
  return (
    <>
      <Modal
        show={loginModalShow}
        onHide={setLoginModalShow}
        size="lg"
        aria-labelledby="contained-modal-title-vcenter"
        centered
      >
        <Modal.Header closeButton>
          <Modal.Title id="contained-modal-title-vcenter">Logout</Modal.Title>
        </Modal.Header>
        <Modal.Body>
          <h4>Are you sure to Logout?</h4>
        </Modal.Body>
        <Modal.Footer>
          <Button onClick={() => setLoginModalShow(false)}>Cancel</Button>
        </Modal.Footer>
      </Modal>
    </>
  );
};

请参考代码沙箱链接:https://codesandbox.io/s/nameless-cdn-70zuq。 访问页面后,单击“打开模式”按钮

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    你想控制父组件的显示/隐藏

    const HomePage = () => {
      const [showLogin, setShowLogin] = useState(false);
      return (
        <>
          <button onClick={() => setShowLogin(true)}>Open Modal</button>
          <LoginModal show={showLogin} close={() => setShowLogin(false)} />
        </>
      );
    };
    
    <Modal
            show={props.show}
            cancel={props.close}
    ...
    

    这是一个工作示例:

    https://codesandbox.io/s/nice-euclid-d0dw0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-01
      • 2018-03-29
      • 2020-04-20
      • 1970-01-01
      相关资源
      最近更新 更多