react Portal实现传送门(可以把组件挂载到任意节点上)

react Portal实现传送门(可以把组件挂载到任意节点上)

流程图

在这里插入图片描述

react Portal

Portals 提供了一个最好的在父组件包含的DOM结构层级外的DOM节点渲染组件的方法

ReactDOM.createPortal(child,container);

第一个参数child是可渲染的react子项,container是需要挂载到dom元素

使用方法

第一步: 引入createPortal 在react-dom中
import {createPortal} from 'react-dom'
第二步:在constructor定义参数container 就是this.node

利用window.document 记录doc参数 = > 定义this.node 创建div节点=>利用constructor当前的body下挂载在一个div节点上

constructor(props){
   super(props)
  //  记录参数 利用window.document
  const doc =  window.document
  // 定义this.node 创建一个div节点
  this.node = doc.createElement("div")
  // 当前的body下挂载一个div节点
  doc.body.appendChild(this.node)
 }
第三步: 利用createPortal( )方法传递两个参数
render() {
    // 实现createPortal
    return createPortal(
      <div className='dialog'>
        <h3>
          Modal
        </h3> 

      </div>, this.node
    )
  }
第四步:在componetWillUnmout取消绑定,不然会造成重复渲染
 // 在willUnmount中实现订阅和取消订阅
 componentWillUnmount () {
   // 删除this.node
   window.document.body.removeChild(this.node)
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值