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

React如何实现点击显示密码3秒后自动隐藏 修复多次点击提前隐藏Bug

修复方案

问题原因

你的代码核心问题出在存储定时器ID的time变量是普通函数变量,React组件每次因为状态更新重渲染时,这个变量都会被重置,之前存的定时器ID会直接丢失,导致后续的clearTimeout根本无法清除之前已经创建的定时器,多个定时器同时运行就会出现密码提前隐藏的问题。

修复代码

用React内置的useRef存储定时器ID即可,useRef的存储值在组件整个生命周期内不会因为重渲染丢失:

import { useState, useRef } from 'react';

// 组件内部逻辑
const [showPassword, setShowPassword] = useState(false);
// 用ref持久化存储定时器ID
const timerRef = useRef(null);

const handleHidePassword = () => {
    setShowPassword(false);
};

const handleClickEye = () => {
    // 每次点击先清空之前的定时器
    if (timerRef.current) {
        clearTimeout(timerRef.current);
    }
    const willShow = !showPassword;
    setShowPassword(willShow);
    // 切换为显示状态时启动3秒倒计时
    if (willShow) {
        timerRef.current = setTimeout(handleHidePassword, 3000);
    }
};

使用说明

把眼睛图标的onClick事件绑定到handleClickEye即可,该实现满足以下交互:

  • 单次点击图标:密码显示3秒后自动隐藏
  • 连续多次点击图标:每次点击都会重置3秒倒计时,最后一次点击后满3秒才会隐藏
  • 如果当前是显示状态时点击,会直接切换为隐藏状态,符合常规密码框交互习惯

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 12:51:02