Portals

Portals

React 16的Portals特性让我们可以把组件渲染到当前组件树以外的 DOM节点上,这个特性典型的应用场景是渲染应用的全局弹框,使用 Portals后,任意组件都可以将弹框组件渲染到根节点上,以方便弹框的 显示。Portals的实现依赖ReactDOM的一个新的API:
ReactDOM.createPortal(child, container)
第一个参数child是可以被渲染的React节点,例如React元素、由 React元素组成的数组、字符串等,container是一个DOM元素,child将 被挂载到这个DOM节点。


普通情况下,组件的render函数返回的元素会被挂载在它的父级组件上。

然而,有些元素需要被挂载在更高层级的位置。最典型的应用场景:当父组件具有overflow: hidden或者z-index的样式设置时,组件有可能被其他元素遮挡,这个时候你就可以考虑要不要使用Portal使组件的挂载脱离父组件。例如:对话框,tooltip。

class Modal extends Component {

​    constructor(props) {

​        super(props);

​        this.container = document.createElement('div');

​        document.body.appendChild(this.container);

​    }

​    componentWillUnmount(){

​        document.body.removeChild(this.container);

​        console.log("Unmount");

​        

​    }

​    render() {

​        return ReactDom.createPortal(

            <div className ="modals">

​                { <span className="close" onClick={this.props.onClose}> &times; </span> }

​                { <div className="content">  {this.props.children}</div>}

 

​            </div>

​          

​            , this.container);

​    }

}

在APP.js 中调用

class App extends Component {
  constructor(props) {
    super(props);
    this.state = { showModal: true };
  }  
       // 关闭弹框
  closeModal = () => {
    this.setState({ showModal: false });
  };

  render() {
    return (
      <div>
        <h2>Dashboard</h2>
        {this.state.showModal && (<Modal onClose={this.closeModal }>modal dialog</Modal>)}
      </div>
    );
  }
}
1554007649593.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 40、React 什么是React?React 是一个用于构建用户界面的框架(采用的是MVC模式):集中处理VIE...
    萌妹撒阅读 1,069评论 0 1
  • HTML模版 之后出现的React代码嵌套入模版中。 1. Hello world 这段代码将一个一级标题插入到指...
    ryanho84阅读 6,315评论 0 9
  • react 基本概念解析 react 的组件声明周期 react 高阶组件,context, redux 等高级...
    南航阅读 1,091评论 0 1
  • 原教程内容详见精益 React 学习指南,这只是我在学习过程中的一些阅读笔记,个人觉得该教程讲解深入浅出,比目前大...
    leonaxiong阅读 2,860评论 1 18
  • 迦葉佛时,有兄弟二人出家求道;一人持戒、诵经、坐禅;一人广求檀越,修众福业。到释迦文佛出世,一人生长者家;一人作大...
    云峰寺小和尚阅读 284评论 0 0