zoukankan      html  css  js  c++  java
  • 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; 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%; 328px;height:380px;border-radius: 6px;transform:translate(-50%,-50%);-webkit-transform:translate(-50%,-50%);background: green;} 
  • 相关阅读:
    完美解决微信端设置title失败问题
    linux下的find&&grep查找命令
    微信开发二三事
    干掉chrome下input恶心的黄色背景
    关于.gitignore文件使用说明
    HTTPie:一个不错的 HTTP 命令行客户端
    退出登录功能改变window的rootviewcontroller输入框键盘不会收起
    coredata操作工具
    并发编程gcd粗暴记忆法
    网友的百度移动云可穿戴部门的面试经历
  • 原文地址:https://www.cnblogs.com/xutongbao/p/9924767.html
Copyright © 2011-2022 走看看