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接口.本 ...
随机推荐
- CMD命令打包文件夹成jar
网上的很多例子都是直接将在dos界面下输入jar命令出现的帮助信息给贴上了.不明白的人根本看不懂.当然我也看不懂,好在自己试了好多遍,终于成功了.现在我就根据我刚刚的操作来说明一下. 我介绍的是将一个 ...
- jvm 命令使用调优 通过jstat、jmap对java程序进行性能调优
转载:http://blog.csdn.net/jerry024/article/details/8507589 转载: https://blog.csdn.net/zhaozheng7758/art ...
- Oracle 查询表的索引包含的字段
Oracle 查询表的索引包含的字段 select a.uniqueness 索引类型,b.index_name 索引名称,b.column_name 字段 from user_indexes a , ...
- layui 鼠标悬停单元格显示全部
{field : 'subjectId',title : '主题id',align: 'center',edit : 'text',templet:'<div><span title ...
- java泛型--问号?和T或E或K或V的区别
所谓泛型,就是在定义类.接口.方法.参数或成员变量的时候,指定它们操作对象的类型为通用类型. 使用 尖括号 <> 操作符 (The diamond operator )表示泛型, 尖括号内 ...
- CentOS 7 yum Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile
yum install nginx发生的错误 yum install nginx Loaded plugins: fastestmirror, ovl Loading mirror speeds fr ...
- Summary: curated List of Top 75 LeetCode Questions to Save Your Time
Facebook / Eng tech lead Dec 30, 2018 68 Comments New Year Gift to every fellow time-constrained ...
- SQLPrompt 最新版下载地址
https://download.red-gate.com/SQLPromptDownload.exe
- 【Tomcat】Tomcat 配置开机启动
参考:[Linux]开机自动启动脚本 环境:Linux环境(CentOS 7.4) 步骤 1.在/etc/rc.d/rc.local文件底部,添加内容: # apache-tomcat- /data/ ...
- linux记录-安装elk记录(参考博文)
什么是ELK? 通俗来讲,ELK是由Elasticsearch.Logstash.Kibana .filebeat三个开源软件的组成的一个组合体,这三个软件当中,每个软件用于完成不同的功能,ELK 又 ...