首页 > 其他 > 详细

React全局浮窗、对话框

时间:2020-02-28 00:30:34      阅读:470      评论:0      收藏:0      [点我收藏+]

下面代码是组件源码:

import React, {Component} from ‘react‘
import {createPortal} from ‘react-dom‘
import styles from ‘./modal.css‘

export default class Modal extends Component {


    constructor(props) {
        super(props)

        const doc = window.document
        this.node = doc.createElement(‘div‘)
        doc.body.appendChild(this.node)

        this.state = {visible: this.props.visible}
    }


    componentWillReceiveProps(nextProps) {
        if (this.props.visible !== nextProps.visible) {
            this.setState({visible: nextProps.visible})
        }
    }

    componentWillUnmount() {
        if (this.node) {
            window.document.body.removeChild(this.node)
        }
    }

    render() {
        return createPortal(
            this.state.visible &&
            <div className={styles.modal}>
                <div className={styles.mask}/>
                <div className={styles.content}>

                </div>
            </div>, this.node
        )
    }
}

下面是组件所用的CSS:

/*@import ‘../_css/config‘;*/

.modal {
    position: fixed;
    display: flex;
    align-items: center;        /*竖直居中 垂直居中*/
    justify-content: center;    /*水平居中*/
    left: 0;
    top: 0;
    bottom: 0;
    right: 0;
    width: 100%;
    height: 100%;
    z-index: 998;
}

.mask {
    background-color: rgba(0, 0, 0, .2);
    position: fixed;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    z-index: 998;
}

.content{
    position: fixed;
    width: 500px;
    height: 300px;
    background: #ffffff;
    z-index: 1000;
    border-radius:5px;

}

下面是如何使用:

import Modal from "../dialog/modal.jsx";

class MenuBar extends React.Component {
    constructor(props) {
        super(props);
        
        this.state = {
            isShowing: false
        }
    }
    render() {
    return (<div className={styles.userP} onClick={this.cloudFileBtnClick}>
                 <Modal visible={this.state.isShowing}/>
            </div>
  ) }

 

React全局浮窗、对话框

原文:https://www.cnblogs.com/Oldz/p/12375261.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!