在设定的时间后从 DOM 中删除元素

2024-05-23

我正在尝试找出在事件触发后从 DOM 中删除元素的 React 方法。

我正在尝试发出警报(copySuccess) when onClick={this.props.handleCopyFact}被触发,然后在 5 秒后淡出该警报。每个组件的状态都在父组件中设置。

这是我的组件的代码:

module.exports = React.createClass({

render: function() {

var copy = null;
if (!this.props.copying && !this.props.editting) {
  copy = (
    <div className="copy-fact-container" onClick={this.props.handleCopyFact}>
      <i className="icon-copy"></i>
      <span>Copy</span>
    </div>
    );

}

var copySuccess = null;
if (this.props.copySuccess) {
  copySuccess = (
    <div className="copy-success">
      <div><i className="icon icon-clipboard"></i></div>
      <p className="heading">Copied to Clipboard</p>
    </div>
    );
}

return (
  <div className="row-body"
    onMouseEnter={this.props.toggleCopyFact}
    onMouseLeave={this.props.toggleCopyFact}>
    <MDEditor editting={this.props.editting}
      content={this.props.content}
      changeContent={this.props.changeContent}/>
  {copy}
  {copySuccess}
  </div>
);
}
});

一种方法是创建一个 Expire 组件,该组件将在延迟后隐藏其子组件。您可以将其与 CSSTransitionGroup 结合使用来执行淡出行为。

jsbin http://jsbin.com/zomiloma/3/edit?js,output

Usage:

render: function(){
    return <Expire delay={5000}>This is an alert</Expire>
}

组件:

var Expire = React.createClass({
  getDefaultProps: function() {
    return {delay: 1000};
  },
  getInitialState: function(){
    return {visible: true};
  },
  componentWillReceiveProps: function(nextProps) {
    // reset the timer if children are changed
    if (nextProps.children !== this.props.children) {
      this.setTimer();
      this.setState({visible: true});
    }
  },
  componentDidMount: function() {
      this.setTimer();
  },
  setTimer: function() {
    // clear any existing timer
    this._timer != null ? clearTimeout(this._timer) : null;

    // hide after `delay` milliseconds
    this._timer = setTimeout(function(){
      this.setState({visible: false});
      this._timer = null;
    }.bind(this), this.props.delay);
  },
  componentWillUnmount: function() {
    clearTimeout(this._timer);
  },
  render: function() {
    return this.state.visible 
           ? <div>{this.props.children}</div>
           : <span />;
  }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在设定的时间后从 DOM 中删除元素 的相关文章

随机推荐

  • Go客户端程序生成大量TIME_WAIT状态的socket

    我有一个 Go 程序 它从多个 goroutine 生成大量 HTTP 请求 运行一段时间后 程序报错 connect cannot allocaterequestedaddress 当检查时netstat 我得到大量 28229 个连接T
  • Powershell:获取 FQDN 主机名

    我想通过 powershell 脚本检索 Windows 服务器的 FQDN 名称 到目前为止我已经找到了2个解决方案 server Invoke Command ScriptBlock hostname 上面的行将仅打印服务器的短名称 s
  • 64 位 pyodbc 是否可以与 32 位 MS Access 数据库对话?

    我正在使用 64 位 python anaconda v4 4 它运行 python v3 我有 MS Access 2016 32 位版本 我想使用 pyodbc 让 python 与 Access 对话 是否可以使用 64 位 pyod
  • git push --force-with-lease 总是安全吗?

    我一直遵循的规则是 一旦 git 历史记录被推送到远程存储库 就不再修改它 但我想知道交互式变基到推送 force with lease 是否绕过了这条规则 如果强制租约成功 对其他用户来说是否完全安全 或者此策略有任何注意事项吗 预先感谢
  • Scala 正则表达式替换为匿名函数

    在 Ruby 中 我可以通过以下方式替换字符串中的字符 a one1two2three a gsub d e e to i 1 gt one2two3three 从第二行开始评估块的结果将替换模式中匹配的内容 我们可以在 Scala 中做类
  • 随机显示 NoMethodError:未定义的方法“空?”对于 0:Fixnum

    它在我的本地计算机上运行良好 但使用 Puma Web 服务器在 Heroku 上的rails admin 中出现以下错误 这是我使用 enumerize 的方式 enumerize date type in last date 0 beg
  • Nuget 3.5 在打包时去掉前导零[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在 v3 5 中 行为发生了变化 因此当它打包一个包时 它会去掉前导零 这不是我们想要的行为 希望 v3 6 能修复这个问题 正如上所解释
  • .NET 中安全身份的本地化

    我想在 NET 中实现一个用于服务 客户端通信的命名管道 并遇到了这段代码 http code msdn microsoft com windowsdesktop CSNamedPipeCommunication 33b2485c view
  • 如何使用 forkjoin 返回 Angular 中两个独立 API 调用的组合响应

    我有两个独立的 api 调用 下面是两个api调用的代码 public getLendingType partyId string Observable lt lendingType string partyId string gt ret
  • 如何以编程方式打开 Run c++?

    问题是如何从 C 以编程方式打开 Run 我知道有一些功能可以替代它 例如 shellexec winexec 但对于某些任务 我只需要出现 运行 对话框 运行对话框位于 shell32 dll 中 使用该函数RunFileDlg 显示对话
  • 为什么表达式“1”==1 的计算结果为 TRUE? [复制]

    这个问题在这里已经有答案了 1 是字符值 其他1是数字 甚至 当我尝试在下面执行时 它给了我 TRUE as character 0 as numeric 0 谁能帮助我理解 为什么 来自help 如果两个参数是不同类型的原子向量 则其中一
  • Selenium Webdriver 和 Java。元素在点 (x, y) 处不可单击。其他元素将收到点击

    我使用显式等待并收到警告 org openqa selenium WebDriverException 元素在点 36 72 处不可单击 其他元素将收到 点击 命令持续时间或超时 393 毫秒 如果我使用Thread sleep 2000
  • 如何在 Java 中将帧速率限制为 60 fps?

    我正在编写一个简单的游戏 我希望将帧速率限制在 60 fps 而不会让循环占用我的 CPU 我该怎么做 您可以阅读游戏循环文章 https dewitters com dewitters gameloop 在尝试实现任何内容之前 首先了解游
  • 如何在“order by”中添加条件?

    我有一个带有输入参数的存储过程 现在根据这个参数 我的 order by 语句将发生变化 如果输入参数是 ID int类型列 则按ID排序 如果是 ProductType 则按产品类型排序 如果是 IssueDate 则应按问题日期排序 现
  • 迁移问题:MS SQL > MySQL:插入缓冲区内存

    我在使用 MySQL Workbench 上的内置迁移工具时遇到问题 我正在将一个非常大的数据库从 MS SQL 2014 迁移到 MySQL MS SQL 服务器本地部署在我的 Windows 8 1 桌面上 MySQL 服务器在我的网络
  • 用 PHP 截断文件末尾

    我有一个日志文件 我想在 PHP 读取该文件后将其截断 我的代码目前如下所示 fp fopen file r ftruncate fp 125000 fclose fp 但是 这会通过保留first1MB 不过 我想保留last1Mb 的文
  • .NET 正则表达式可匹配任何语言的任何类型的字母

    我可以使用哪种正则表达式来匹配 允许 任何语言的任何类型的字母 我需要匹配任何字母 包括任何变音符号 例如 并排除任何类型的符号 数学符号 货币符号 装饰符号 方框图字符等 和标点符号 我正在使用 ASP NET MVC 2 和 NET 4
  • 融合元组以查找等价类

    假设我们有一个包含 k 个元素的有限域 D d1 dk 我们认为 S 是 D n 的子集 即一组 形式的元组 其中 ai 在 D 中 我们希望使用 S 2 D n 的子集 即一组 形式的元组 其中 Ai 是 D 的子集 来 紧凑地 表示它
  • 仅禁用 resharper 8 (c#) 中的开关片段

    我发现默认的 VS 2013 开关片段比 resharper 的开关片段工作得更好 有什么办法可以禁用它吗 我看到有几种方法可以得到这个 使用 ReSharper IntelliSense 取消选中此处的 开关 ReSharper 模板资源
  • 在设定的时间后从 DOM 中删除元素

    我正在尝试找出在事件触发后从 DOM 中删除元素的 React 方法 我正在尝试发出警报 copySuccess when onClick this props handleCopyFact 被触发 然后在 5 秒后淡出该警报 每个组件的状