React 创建对话框组件

Dialog.js:

import React from 'react';
import ReactDOM from 'react-dom';
export default class Dialog {
    static modal(Component, zIndex) {
        let body = document.body;
        let showDom = document.createElement("div");
        showDom.classList.add('app-pop');
        showDom.id= 'm-pop';
        showDom.style.zIndex = zIndex || 999;
        body.appendChild(showDom);
        let close = () => {
            ReactDOM.unmountComponentAtNode(showDom);
            body.removeChild(showDom);
        }
        ReactDOM.render(
            <Component onClose={close} />,
            showDom
        );
    }
}

App.js

import React, { Component } from 'react';
import Dialog from './Dialog';

class DialogInner extends Component {
    componentDidMount() {
        document.getElementById('m-pop').addEventListener('click', e => {
            if (e.target && e.target.className.indexOf('app-pop-inner') >= 0) {
                return;
            }
            this.props.onClose();
        });
    }
    handleClose() {
        this.props.onClose();
    }
    render() {
        return (
            <div className="app-pop-inner">
                <button onClick={this.handleClose.bind(this)}>Close</button>
            </div>
        )
    }
}

class App extends Component {
    handleOpen() {
        Dialog.modal(DialogInner, 1);
    }
    render() {
        return (
            <div>
                <button onClick={this.handleOpen.bind(this)}>打开弹框</button>
            </div>
        );
    }
}

export default App;

index.js:

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import './index.css';
import registerServiceWorker from './registerServiceWorker';

ReactDOM.render(<App />, document.getElementById('root'));
registerServiceWorker();

index.css:

.app-pop {position: fixed;width: 100%;top: 0;bottom: 0;right: 0;background-color: rgba(0,0,0,.3);overflow: auto;}  
.app-pop-inner {position:absolute;left:50%;top:50%;width: 328px;height:380px;border-radius: 6px;transform:translate(-50%,-50%);-webkit-transform:translate(-50%,-50%);background: green;} 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐同保

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值