React.js处理组件对应的DOM需要在父组件以外的地方渲染的情况

对于悬浮窗一类的组件,组件里的内容往往需要渲染在父组件以外的地方,比如<body>,此时组件内需要做如下操作:

  1. 在组件对应的Class中准备一个变量container,默认值为null,用于存储渲染容器对应的DOM,该变量将用于从<body>中删除该DOM的操作。
  2. 组件默认的render()函数返回null,防止该组件在父组件中渲染DOM。
  3. 在组件的componentDidUpdate()生命周期中处理相关的渲染逻辑。如果渲染用的容器不存在或被删除,则手工使用原生的document.createElement()创建对应的容器,并使用document.body.appendChild(),将该容器添加到<body>的末尾,然后使用this.container变量存储渲染用容器DOM;最后使用ReactDOM.render()(第2个参数传渲染容器对应的DOM)将待渲染的内容渲染到容器DOM中。
  4. 在组件的componentWillUnmount()进行对应的销毁操作,比如当挂在<body>上的渲染用的容器DOM仍然存在时,将该DOM从<body>中删除。

这样可以防止因弹出框不在<body>上而导致出现悬浮窗被意外遮挡等问题。

注意

  • 在组件的componentDidUpdate()生命周期中可以随时新建或销毁渲染容器对应的DOM。但不建议在此生命周期中销毁渲染容器对应的DOM,销毁DOM的工作建议只放在componentWillUnmount()生命周期中进行。
  • 在组件的componentDidUpdate()生命周期中尽量避免在该生命周期中执行过多操作,因为每次this.props发生变化时,该生命周期方法都会被调用一次,易造成性能问题。
  • 将组件里的内容渲染在父组件以外的操作一般应在项目的公用组件库中实现,一般不要在和业务高度相关、复用率低的组件中实现,以防止代码逻辑陷入混乱。

范例

以下是一个简单的对话框组件的代码:

import {
   Component} from 'react';
import ReactDOM from 'react-dom';
export default class
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值