【React】portal

发布于:2024-06-29 ⋅ 阅读:(132) ⋅ 点赞:(0)

createPortal 允许你将 JSX 作为 children 渲染至 DOM 的不同部分。

createPortal(children, domNode, key?)

使用 portal 渲染模态对话框

import NoPortalExample from "./components/NoPortalExample";
import PortalExample from "./components/PortalExample";


function App() {

    return (
        <div className="App">
            <div className="clipping-container">
                <NoPortalExample  />
            </div>
            <div className="clipping-container">
                <PortalExample />
            </div>
        </div>
    );
}

export default App;
import React from 'react';

function ModalContent({ onClose }) {

    return (
        <div>
            <div>这是一个对话模态框</div>
            <button onClick={onClose}>关闭</button>
        </div>
    );
}

export default ModalContent;
import React, {useState} from 'react';
import ModalContent from "./ModalContent";

function NoPortalExample(props) {
    const [showModal, setShowModal] = useState(false)
    return (
        <div>
            <button onClick={() => setShowModal(true)}>不使用 portal 展示模态</button>
            {showModal && (
                <ModalContent onClose={() => setShowModal(false)} />
            )}
        </div>
    );
}

export default NoPortalExample;
import React, {useState} from 'react';
import ModalContent from "./ModalContent";
import {createPortal} from "react-dom";

function PortalExample(props) {
    const [showModal, setShowModal] = useState(false);
    return (
        <div>
            <button onClick={() => setShowModal(true)}>使用 portal 展示模态</button>
            {showModal && createPortal(
                <ModalContent onClose={() => setShowModal(false)} />,
                document.body
            )}
        </div>
    );
}

export default PortalExample;

image.png

image.png

image.png


网站公告

今日签到

点亮在社区的每一天
去签到