创建门户模式在 React 中不起作用

问题描述 投票:0回答:1

我想使用React Portal创建一个模态,所以这里我为模态数据创建了一个showModal容器,一个我们可以用来控制模态的Modal容器,在index.html中,我想要一个myPortalModal类的包装器,通过它我必须向整个应用程序显示模态,并为模态视图提供一些 CSS。我的疑问是,如果我想点击点击按钮,它会抛出错误“目标容器不是 DOM 元素”。那么如何解决问题并使用包装器模态组件来处理整个应用程序,这里的代码在index.html下面给出,所以如果需要对代码进行任何修改,请这样做,以及为什么会发生这个错误,即使我做了所有的事情正确的事情。

<!DOCTYPE html>
<html lang="en">
  <head>
  </head>
  <body>
    <div id="root"></div>
    <div class="myPortalModal"></div>
  </body>
</html>

并显示模态容器代码

import React from "react";
import ReactDOM from 'react-dom';
export default function ShowModal({closeModal}) {
 
  return ReactDOM.createPortal(
    <>
    <div className="modal-wrapper" onClick={closeModal}></div>
    <div className="modal-container">
      <h1>Heading</h1>
      <p>this is a modal , pls click close</p>
      <button onClick={closeModal}>Close</button>
      </div>
    </>,
    document.querySelector('.myPortalModal')
  );
}

模态容器代码

import React, { useState } from "react";
import ShowModal from "./ShowModal";
export default function Modal() {
  const [showModal, setShowModal] = useState(false);
  const closeModal = () => setShowModal(false);
  return (
    <>
      <button onClick={() => setShowModal(true)}>Click</button>
      {showModal && <ShowModal closeModal={closeModal} />}
    </>
  );
}

Modal 被导入到 App 组件中

javascript reactjs modal-dialog popup react-modal
1个回答
0
投票

你改成返回jsx

export default function ShowModal({closeModal}) {
 
  return <> {ReactDOM.createPortal(
    <>
    <div className="modal-wrapper" onClick={closeModal}></div>
    <div className="modal-container">
      <h1>Heading</h1>
      <p>this is a modal , pls click close</p>
      <button onClick={closeModal}>Close</button>
      </div>
    </>,
    document.querySelector('.myPortalModal')
  )} </>
}
© www.soinside.com 2019 - 2024. All rights reserved.