react封装Dialog弹框
Cupid510 人气:0Dialog.js
import React, { Component, Children } from "react"; import { createPortal } from "react-dom"; import "../static/css/Dialog.scss" export default class Dialog extends Component { constructor(props) { super(props); const doc = window.document; this.node = doc.createElement("div"); doc.body.appendChild(this.node); } componentWillUnmount() { window.document.body.removeChild(this.node); } render() { const { children, hideDialog, hide } = this.props; let tem = hide ? "hidden" : ""; console.log("hide", tem); return createPortal( <div className="dialogBox" style={{ visibility: tem }}> <div className="dialog"> {children} <button onClick={hideDialog}>close</button> </div> </div>, this.node ); } }
Dialog.scss
.dialogBox { position: fixed; top: 0; right: 0; bottom: 0; left: 0; margin: auto; width: 100%; height: 100%; background: rgba($color: #000000, $alpha: 0.5); display: flex; justify-content: center; align-items: center; .dialog{ width: 50%; height: 50%; text-align: center;; background-color: #fff; } }
DialogPage.js 使用
/* * @Author: shihaixia * @Date: 2022-02-24 09:58:02 * @Description: */ import React, { Component } from "react"; import { Button } from "antd"; import Dialog from "../components/Dialog"; export default class DialogPage extends Component { constructor(props) { super(props); this.state = { showDialog: false, }; } handleShowDialog = () => { this.setState({ showDialog: !this.state.showDialog, }); }; render() { const { showDialog } = this.state; return ( <div className="dialogPage"> <h1>DialogPage</h1> <Button onClick={this.handleShowDialog}>切换</Button> {showDialog && ( <Dialog hideDialog={this.handleShowDialog} hide={false}> <h3>标题</h3> <p>这是一个弹窗</p> </Dialog> )} </div> ); } }
加载全部内容