码迷,mamicode.com
首页 > 其他好文 > 详细

React全局浮窗、对话框

时间:2020-02-28 01:32:26      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:bsp   log   ble   bar   from   render   import   com   mount   

下面代码是组件源码:

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全局浮窗、对话框

标签:bsp   log   ble   bar   from   render   import   com   mount   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!