zoukankan      html  css  js  c++  java
  • document.body.removeChild 获取到 symbol 标签

    在做全局loading时,出现的问题,使用 antd-mobile 中 Icon 组件,导致 loading组件无法关闭的问题,

    loading.jsx

    import React from 'react';
    import ReactDOM from 'react-dom';
    import { Icon } from 'antd-mobile';
    import './style.less';
    
    class Loading {
      static animating = false
      open () {
        Loading.animating = document.getElementById('loading')
        if (Loading.animating) return;
        const dom = document.createElement('div')
        dom.setAttribute('id', 'loading')
        document.body.appendChild(dom)
        ReactDOM.render(
          <div className='load' id='load'>
            <Icon type='loading' />
          </div>, dom
        )
      }
      close () {
        console.log(document.getElementById('loading'))
        document.body.removeChild(document.getElementById('loading'))
      }
    }
    
    export default new Loading();

    调用顺序

    Loading.open()

    setTimeout(() => {

     Loading.close()

    }, 1000);

    打印出的信息

    出现 问题:

    Loading.close() 方法执行时,无法清除元素,即  document.body.removeChild(document.getElementById('loading'))  方法无效
     
     
     
    解决
    由 Icon 组件 改为  ActivityIndicator 组件, console.log(document.getElementById('loading'));  即可获得到 正常 的 div元素,即 可通过removeChild  清除
    import React from 'react';
    import ReactDOM from 'react-dom';
    import { ActivityIndicator } from 'antd-mobile';
    import './style.less';
    
    class Loading {
      static animating = false
      open () {
        Loading.animating = document.getElementById('loading')
        if (Loading.animating) return;
        const dom = document.createElement('div')
        dom.setAttribute('id', 'loading')
        document.body.appendChild(dom)
        ReactDOM.render(
          <div className='load' id='load'>
            <ActivityIndicator size="large" />
          </div>, dom
        )
      }
      close () {
        const ld = document.getElementById('loading')
          if (ld) {
            document.body.removeChild(ld)
          }
      }
    }
    
    export default new Loading();
    原因
    Icon 组件实际为一个 SVG 标签,所以会获取到 symbol 标签
  • 相关阅读:
    工作流二次开发之新增表单实践(二)
    layui表格及工作流二次开发实践(一)
    记一个递归封装树形结构
    SpringCloud微服务之宏观了解
    统一结果返回&统一异常处理
    mybatis-Plus 实践篇之CRUD操作
    修改MariaDB-root密码
    iftop-监控服务器实时带宽情况
    Wordpress安装-报错说明
    MariaDB忘记root密码
  • 原文地址:https://www.cnblogs.com/-roc/p/15070385.html
Copyright © 2011-2022 走看看