You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React中经过指定时间后自动移除元素的className

实现方法

你只需要在点击触发状态更新后加一个1秒的定时器,将状态重置为false即可,同时要注意补全定时器清理逻辑避免内存泄漏,另外你原始代码里有函数名大小写不匹配的问题需要修正。

完整可运行代码

import { useState, useEffect } from 'react';

// 你的样式定义保持不变即可
const btnClicked = {
  bgChange: 'orange-bg-class' // 替换成你实际的类名
};

function DemoComponent() {
  let [Clicked, setState] = useState(false);
  // 存储定时器ID,用于后续清理
  let timeoutId = null;

  const Clicking = () => {
    setState(true);
    // 1秒后重置状态,自动移除className
    timeoutId = setTimeout(() => {
      setState(false);
    }, 1000);
  };

  // 组件卸载时清理未执行的定时器,避免内存泄漏
  useEffect(() => {
    return () => clearTimeout(timeoutId);
  }, []);

  // 注意这里onClick绑定的函数名要和定义的一致,你原代码里的小写clicking是错误的
  return <Button text="dummytext" onClick={Clicking} className={Clicked ? btnClicked.bgChange : ''} />;
}

可选优化

如果需要避免用户短时间多次点击导致多个定时器冲突,可以在点击时先清空上一个定时器:

const Clicking = () => {
  // 先清空之前未执行的定时器
  if (timeoutId) clearTimeout(timeoutId);
  setState(true);
  timeoutId = setTimeout(() => {
    setState(false);
  }, 1000);
};

内容的提问来源于stack exchange,提问作者IhateReact

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:27:02