react实现提示消息容器,可以动态添加,删除内部子提示消息
import React, { useState, useRef, useEffect } from 'react'
import PropTypes from 'prop-types'
import _ from 'lodash'
import uuidv1 from 'uuid/v1'
import './index.less'
let currentTipComponents = []
let setCurrentTipComponents
function GlobalTipContainer(props) {
const { style } = props
const wrapperStyle = _.assign({}, style)
const [tipComponents, setTipComponents] = useState([])
currentTipComponents = tipComponents
setCurrentTipComponents = setTipComponents
const [displayedTipComponents, setDisplayedTipComponents] = useState([])
const [mouseHover, setMouseHover] = useState(false)
const wrapElemRef = useRef(null)
useEffect(() => {
if (mouseHover === false) {
wrapElemRef.current.scrollTop = 10e10
}
})
useEffect(() => {
setDisplayedTipComponents(tipComponents.slice(0, 2))
}, [tipComponents])
return (
<div
className="global-tip-container-component-wrap"
ref={wrapElemRef}
onMouseEnter={() => {
setMouseHover(true)
}}
onMouseLeave={() => {
setMouseHover(false)
}}
style={wrapperStyle}
>
{displayedTipComponents}
</div>
)
}
GlobalTipContainer.addTip = (tipComponent) => {
const key = uuidv1()
currentTipComponents = currentTipComponents.slice(0)
currentTipComponents.push(React.cloneElement(tipComponent, {
key,
onClose: _.flow(tipComponent.props.onClose || _.noop, () => { GlobalTipContainer.removeTip(key) }),
}))
setCurrentTipComponents(currentTipComponents)
return key
}
GlobalTipContainer.removeTip = (key) => {
const index = _.findIndex(currentTipComponents, ['key', key])
if (index !== -1) {
currentTipComponents.splice(index, 1)
setCurrentTipComponents(currentTipComponents.slice(0))
}
}
GlobalTipContainer.propTypes = {
style: PropTypes.object,
}
GlobalTipContainer.defaultProps = {
style: {},
}
export default GlobalTipContainer
react实现提示消息容器,可以动态添加,删除内部子提示消息的更多相关文章
- Android 在布局容器中动态添加控件
这里,通过一个小demo,就可以掌握在布局容器中动态添加控件,以动态添加Button控件为例,添加其他控件同样道理. 1.addView 添加控件到布局容器 2.removeView 在布局容器中删掉 ...
- 编辑 Ext 表格(一)——— 动态添加删除行列
一.动态增删行 在 ext 表格中,动态添加行主要和表格绑定的 store 有关, 通过对 store 数据集进行添加或删除,就能实现表格行的动态添加删除. (1) 动态添加表格的行 gridS ...
- 用Javascript动态添加删除HTML元素实例 (转载)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js实现网页收藏功能,动态添加删除网址
<html> <head> <title> 动态添加删除网址 </title> <meta charset="utf-8"&g ...
- jquery动态添加删除div--事件绑定,对象克隆
我想做一个可以动态添加删除div的功能.中间遇到一个问题,最后在manong123.com开发文摘 版主的热心帮助下解答了(答案在最后) 使用到的jquery方法和思想就是:事件的绑定和销毁(unbi ...
- jQuery动态添加删除CSS样式
jQuery框架提供了两个CSS样式操作方法,一个是追加样式addClass,一个是移除样式removeClass,下面通过一个小例子讲解用法. jQuery动态追加移除CSS样式 <!DOCT ...
- JS动态添加删除html
本功能要求是页面传一个List 集合给后台而且页面可以动态添加删除html代码需求如下: 下面是jsp页面代码 <%@ page language="java" pageEn ...
- zookeeper动态添加/删除集群中实例(zookeeper 3.6)
一,用来作为demo操作的zookeeper集群中的实例: 机器名:zk1 server.1=172.18.1.1:2888:3888 机器名:zk2 server.2=172.18.1.2:2888 ...
- C#控制IIS动态添加删除网站
我的目的是在Winform程序里面,可以直接启动一个HTTP服务端,给下游客户连接使用. 查找相关技术,有两种方法: 1.使用C#动态添加网站应用到IIS中,借用IIS的管理能力来提供HTTP接口.本 ...
随机推荐
- Oracle备份的几种方式
这里使用Oracle 12C来大概演示说明一下rman的基本用法,这里不会深入讨论,因为本人也只是刚刚才接触,只是结合了网上的一些文章以及自己的实践来总结并拿出来大家学习,谢谢 目录 一.关于备份与恢 ...
- arcpy SearchCursor sql_clause
import arcpy fc = 'c:/data/base.gdb/well' fields = ['WELL_ID', 'WELL_TYPE'] # Use ORDER BY sql claus ...
- [JDBC/Oracle]设置Statement.setQueryTimeout(seconds)并不好用 原因:环境问题
对比实验:https://www.cnblogs.com/xiandedanteng/p/11960320.html 注:setQueryTimeout语句还是好用的,但有些环境不支持,下文是在单位虚 ...
- mount: unknown filesystem type ‘ntfs’ 解决方法
问题: mount –t ntfs /dev/sde1 /mnt/mount: unknown filesystem type ‘ntfs’ 这是由于CentOS release 6.6(Final) ...
- ubuntu18.04安装docker和开通对外2375端口(方便portainer管理)
date: 2019-08-03 21:39:37 author: headsen chen apt-get install apt-transport-https ca-certificates ...
- Docs-.NET-C#-指南-语言参考-关键字-值类型:char
ylbtech-Docs-.NET-C#-指南-语言参考-关键字-值类型:char 1.返回顶部 1. char(C# 参考) 2019/10/22 char 类型关键字是 .NET System.C ...
- Postgresql常用函数整理
一.字符串函数 1.函数:string || string(string || non-string) 说明:字符串(或与非字符串)连接 示例: 2.函数:char_length(string) 说明 ...
- Python3基础 函数 参数 在设定缺省值的情况下指明参数类型
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...
- osg 渲染ifc数据-测试
直接使用osg渲染ifc数据,提高渲染速度. #include "teslamanage.h" #include <QtWidgets/QApplication> #i ...
- Flutter实战(四)---LoadingDialog
原文链接:https://blog.csdn.net/johnWcheung/article/details/89634582