zoukankan      html  css  js  c++  java
  • Toast组建的实现

    1.思路

    生成一个新的div,添加(append)到document下,然后使用ReactDOM渲染该元素

    创建一个Toast的类,因为需要类直接使用方法,所以创建相应的静态方法,直接调用

    在方法调用前,清除定时器(如同节流),防止前面的定时器影响到后面弹出的toast的持续时间

    2. es6中类的静态方法

    静态的是指向类自身,而不是指向实例对象,主要是归属不同,这是静态属性的核心

    class Foo {
        static classMethod() {
            return 'hello';
        }
    }
    

    静态方法使用:在方法前加上static关键字

    为什么使用静态方法:阻止方法被实例继承,类的内部相当于实例的原型,所有在类中直接定义的方法相当于在原型上定义方法,都会被类的实例继承,但是使用static静态方法定义的不会被实例继承,而且可以被实例直接应用Foo.classMethod(),此时写成new Foo.classMethod()会提示不存在此方法

    3、静态方法中this指向

    class Foo {
      static bar () {
        this.baz();
      }
      static baz () {
        console.log('hello');
      }
      baz () {
        console.log('world');
      }
    }
     
    Foo.bar() // hello
    

    this指向类而不是类的实例

    静态方法可以被子类继承,也可以被super调用

    类的实例方法调用 new Com().fn()

    类的静态方法调用 Com.fn()

    4、实现Toast组件

    import React from 'react'
    import './index.scss'
    import  ReactDOM from 'react-dom'
    let timer = null
    
    class Toast {
        static info (msg, timeout) {
            msg = msg || 'info';
            timeout = timeout || 2000;
            init(); // 显示
            setTime(timeout)
            ReactDOM.render(
                <span>{msg}</span>, document.getElementById('toast'));
        }
    }
    
    function init () {
        clearTimeout(timer);
        let toast = document.getElementById('toast')
        if (toast) {
            toast.style.display = "block"
        } else {
            let div = document.createElement("div")
            div.setAttribute("id", "toast")
            document.body.appendChild(div)
        }
    }
    
    function setTime (timeout) {
        timer = setTimeout (() => {
            let toast = document.getElementById('toast')
            if (toast) {
                toast.style.display = "none"
            }
        }, timeout)
    }
  • 相关阅读:
    [OS] 信号量(Semaphore)
    [OS] 进程互斥
    [剑指Offer] 52.正则表达式匹配
    [剑指Offer] 51.构建乘积数组
    [剑指Offer] 50.数组中重复的数字
    [剑指Offer] 49.把字符串转换成整数
    [剑指Offer] 48.不用加减乘除做加法
    [剑指Offer] 47.求1+2+3+...+n
    PHP知识库图谱汇总(完善中)
    修改thinkphp路由模式,去掉Home
  • 原文地址:https://www.cnblogs.com/jhflyfish/p/12131731.html
Copyright © 2011-2022 走看看