React 用户点击某个元素后只执行一次操作

React开发中经常会遇到需求:用户点击某个元素后只执行一次特定操作。比如,用户点击按钮后弹出提示框,但希望再次点击按钮不再触发提示框。针对这种需求,可以封装一个自定义Hooks来实现只允许点击一次的功能。

jsx 复制代码
import {useCallback, useState} from 'react';

const useOnceClick = (onClick: (event?: any) => void) => {
  const [hasClicked, setHasClicked] = useState(false);

  return useCallback((event: any) => {
    if (!hasClicked) {
      onClick(event);
      setHasClicked(true);
    }
  }, [hasClicked, onClick]);
};

export default useOnceClick;

上面的代码展示了名为useOnceClick的自定义Hooks。它接受一个函数作为参数,在点击事件发生时调用该函数。Hooks内部使用了useState来追踪是否已经点击过,并使用useCallback确保返回的回调函数在依赖没有变化时不会重新创建。

使用这个自定义Hooks非常简单,只需要在函数组件中调用它并传入需要执行的点击事件处理函数即可。例如:

jsx 复制代码
import React from 'react';
import useOnceClick from './useOnceClick';

const App = () => {
  const handleClickOnce = useOnceClick(() => {
    alert('只能点击一次哦!');
  });

  return (
    <button onClick={handleClickOnce}>点击我</button>
  );
};

export default App;

在上面的例子中,当用户点击按钮时,弹出的提示框只会出现一次。再次点击按钮时,并不会再次触发弹框。

通过这个简单的自定义Hooks,我们可以轻松实现只允许点击一次的功能,提升用户体验和交互效果。

相关推荐
芯智工坊3 小时前
每周一个开源项目 #4:ChatGPT-Next-Web 增强版
前端·chatgpt·开源
左右用AI3 小时前
每周1亿次下载的axios被投毒了,但是源码里没有一行恶意代码!
前端·后端
英俊潇洒美少年3 小时前
前端模块化 AMD、CMD、CommonJS、ESM的差异对比
前端
攀登的牵牛花3 小时前
Claude Code 泄露事件复盘:前端发布流程哪里最容易翻车
前端·github·claude
D_C_tyu4 小时前
vue3 + vue3-print-nb 插件实现打印功能
前端·javascript·vue.js
paul_chen214 小时前
Vite + Vue SPA 在子路径部署(内外网访问+Nginx 反向代理)
前端·vue.js·nginx
星如雨グッ!(๑•̀ㅂ•́)و✧4 小时前
Reactor背压
java·服务器·前端
笑笑先生4 小时前
从接口搬运工到研发控制平面,BFF 到底在解决什么?
前端·架构·node.js
霪霖笙箫4 小时前
「JS全栈AI Agent学习」二、反思、工具使用、规划——让 Agent 从"执行者"变成"自主完成者"
前端·agent·ai编程
前端缘梦4 小时前
Next.js全栈项目部署全流程|从0到1解决数据库、WebSocket、图片上传所有坑
前端·全栈·next.js