标签:als ons nsf portal rgba and window console center
弹窗类组件的要求弹窗内容在A处声明,却在B处展示。react中相当于弹窗内容看起来被render到?个组件?? 去,
实际改变的是??上另?处的DOM结构。
父组件:
1 import React, { Component } from "react"; 2 import { Button } from "antd"; 3 import Dialog from "../components/Dialog"; 4 5 export default class DialogPage extends Component{ 6 constructor(props){ 7 super(props) 8 this.state={ 9 showDialog:false 10 } 11 } 12 handleShowDialog=()=>{ 13 this.setState({ 14 showDialog:!this.state.showDialog 15 }) 16 }; 17 render() { 18 const { showDialog } = this.state; 19 return ( 20 <div className="dialogPage"> 21 <h1>DialogPage</h1> 22 <Button onClick={this.handleShowDialog}>dialog toggle</Button> 23 {showDialog && ( 24 <Dialog hideDialog={this.handleShowDialog} hide={false}> 25 这是一个弹窗 26 </Dialog> 27 )} 28 </div> 29 ); 30 } 31 }
子组件:
import React,{Component} from ‘react‘; import {createPortal} from ‘react-dom‘ export default class Dialog extends Component{ constructor(props){ super(props); const doc = window.document; this.node = doc.createElement("div"); doc.body.appendChild(this.node) } componentWillUnmount(){ window.document.body.removeChild(this.node); } render(){ const {hideDialog, children, hide} = this.props; console.log(‘children‘, children) let tem = hide ? ‘hidden‘ :""; return createPortal( <div className="dialog" style={{ visibility: tem }}> {typeof hideDialog==="function" && ( <button onClick={hideDialog}>关闭弹窗</button>)} {children} </div>, this.node ) } }
标签:als ons nsf portal rgba and window console center
原文地址:https://www.cnblogs.com/nothingness/p/13659371.html