React全局浮窗对话框

Posted oldz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React全局浮窗对话框相关的知识,希望对你有一定的参考价值。

下面代码是组件源码:

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全局浮窗对话框的主要内容,如果未能解决你的问题,请参考以下文章

React处理点击组件以外区域事件

《JavaScript设计模式与开发实践》—— 单例模式

iOS 一行代码集成微信浮窗功能

js设计模式学习 --- 单例模式1

执行代码时有时不显示对话框片段

无法在片段内创建对话框