#25 React+Typescipt Props事件类型示例

在React和TypeScript中处理事件,如点击或改变事件,是交云用户界面的基础。以下是如何在组件的props中定义和使用事件处理函数的几种示例,以及如何在TypeScript中为这些事件处理函数提供类型注解。

1. 基本点击事件

定义一个按钮组件,它接受一个点击事件作为props

interface ButtonProps {
  onClick: () => void; // 定义点击事件处理器类型
}

const Button: React.FC<ButtonProps> = ({ onClick, children }) => {
  return <button onClick={onClick}>{children}</button>;
};

// 使用组件
const App = () => {
  const handleClick = () => {
    console.log('Button clicked');
  };

  return <Button onClick={handleClick}>Click Me</Button>;
};

2. 带有事件对象的点击事件

如果你需要访问事件对象(例如,鼠标事件),你可以在类型注解中指定事件的类型。

interface DetailedButtonProps {
  onClick: (event: React.MouseEvent<HTMLButtonElement>) => void;
}

const DetailedButton: React.FC<DetailedButtonProps> = ({ onClick, children }) => {
  return <button onClick={onClick}>{children}</button>;
};

// 使用组件
const App = () => {
  const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {
    console.log('Button clicked', event.currentTarget);
  };

  return <DetailedButton onClick={handleClick}>Click Me</DetailedButton>;
};

3. 改变事件

定义一个输入组件,它接受一个onChange事件作为props

interface InputProps {
  onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
}

const Input: React.FC<InputProps> = ({ onChange }) => {
  return <input type="text" onChange={onChange} />;
};

// 使用组件
const App = () => {
  const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
    console.log('Input value changed', event.target.value);
  };

  return <Input onChange={handleChange} />;
};

4. 泛型事件处理器

对于多用途组件,您可能希望定义一个泛型事件处理器类型,以便在多种不同类型的事件中重用。

type GenericEventHandler<E> = (event: E) => void;

interface GenericButtonProps {
  onClick: GenericEventHandler<React.MouseEvent<HTMLButtonElement>>;
}

const GenericButton: React.FC<GenericButtonProps> = ({ onClick, children }) => {
  return <button onClick={onClick}>{children}</button>;
};

// 使用组件
const App = () => {
  const handleClick: GenericEventHandler<React.MouseEvent<HTMLButtonElement>> = (event) => {
    console.log('Generic Button clicked', event.currentTarget);
  };

  return <GenericButton onClick={handleClick}>Generic Click Me</GenericButton>;
};

这些示例展示了如何在TypeScript中为React组件定义和使用不同类型的事件处理函数props。通过明确指定事件处理函数的类型,您可以确保在应用程序中使用事件时的类型安全和清晰的API设计。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/492563.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

查询 in条件下按顺序排序

查询语句 select * from user where id in (5,21,6);查询结果是不是按照参数顺序排列的&#xff0c;为了保证查询顺序可以使用 select * from sj_user where id in(5,21,6) order by FIELD(id,5,21,6); //或者 select * from sj_user where id in(5,21,6) order by FIND_IN_S…

MFC标签设计工具 图片控件上,移动鼠标显示图片控件内的鼠标xy的水平和垂直辅助线要在标签模板上加上文字、条型码、二维码 找准坐标和字体大小 源码

需求&#xff1a;要在标签模板上加上文字、条型码、二维码 找准坐标和字体大小 我生成标签时&#xff0c;需要对齐和 调文字字体大小。这工具微调 能快速知道位置 和字体大小。 标签设计(点击图片&#xff0c;上下左右箭头移动 或-调字体) 已经够用了&#xff0c;滚动条还没完…

使用docker-compose搭建wordpress博客

1、从远程仓库拉取worldpress镜像到本地 2、新建一个项目&#xff0c;然后在新建的项目目录里面新建一个docker-compose.yml模版文件。 3、编写docker-compose.yml文件 4、docker-compose up 运行项目。 5、在浏览器测试 使用docker-compose搭建wordpress博客实验成功。

过滤器 Filter

目录 1、Filter是什么 2、原理 3、怎样使用 步骤&#xff1a; Filter的执行流程&#xff1a; 拦截路径配置&#xff1a; 配置方式&#xff1a; 过滤器链&#xff1a; 1、Filter是什么 Filter是一个在计算机中用于筛选、过滤和修改数据的组件或模块。它在数据传输和处理…

python入门题:输入输出练习

以下是Python基础语法的练习&#xff0c;项目要求和代码如下&#xff1a; """ 例3&#xff1a;小精灵&#xff1a;你好&#xff0c;欢迎古灵阁&#xff0c;请问您需要帮助吗&#xff1f;需要or不需要&#xff1f; 你&#xff1a;需要 小精灵&#xff1a;请问你需…

python 中判断文件、目录是否存在的方法

判断目录是否存在并创建目录 一、实现上传文件功能二、判断目录是否存在的办法2.1、使用os模块2.1.1、判断目录是否存在2.1.2、os.makedirs()&#xff1a;递归创建目录 2.2、使用pathlib模块2.2.1、path.exist()判断目录是否存在2.2.1、path.mkdir()&#xff1a;创建目录 2.3、…

深入聊聊企业数字化转型这个事儿

01 什么是数字化&#xff1f; 聊数字化&#xff0c;就不得不聊聊信息化、智能化。佛性的说&#xff1a;信息化是数字化的前世&#xff0c;智能化是数字化的来生&#xff01;我习惯用一个结构化的图形来表示事物之间的关系&#xff0c;信息化、数字化、智能化的关系如下&#…

后端基础篇- 社区 IDEA 手动 Maven 创建 SpringBoot 项目、Maven 安装与配置环境变量、IDEA 集成 Maven

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Maven 安装与配置环境变量 1.1 下载并解压安装包 1.2 配置本地仓库 1.3 配置阿里云私服 1.4 配置环境变量 2.0 IDEA 集成 Maven 2.1 首先创建一个新项目 2.2 开始…

Unity编辑器功能 将选中的文件夹复制一份到其他文件夹

[MenuItem("Ab包工具/将选中的文件移动到StreamingAssets文件夹下")] public static void MoveFireToStreamA() { //得到选中文件的数组 Object[] selectobj Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets); i…

【数据结构初阶】之堆(C语言实现)

数据结构初阶之堆&#xff08;C语言实现&#xff09; &#x1f30f; 堆的概念&#x1f30f; 堆的模拟实现&#x1f413; 堆的结构和方法接口&#x1f413; 堆的方法的模拟实现&#x1f64a; 堆的初始化&#x1f64a; 堆的构建&#x1f64a; 堆的插入&#x1f64a; 向上调整&…

sentinel热点参数流控

1、概念 热点参数限流会统计传入参数中的热点参数&#xff0c;并根据配置的限流阈值与模式&#xff0c;对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制&#xff0c;仅对包含热点参数的资源调用生效。 2、示例 2.1、目的 对于如下的/get接口的参…

【正点原子FreeRTOS学习笔记】————(13)队列集

这里写目录标题 一、队列集简介&#xff08;了解&#xff09;二、队列集相关API函数介绍&#xff08;熟悉&#xff09;三、队列集操作实验&#xff08;掌握&#xff09; 一、队列集简介&#xff08;了解&#xff09; 一个队列只允许任务间传递的消息为同一种数据类型&#xff…

鸿蒙开发之了解ArkTS

鸿蒙开发者官网 &#xff1a; https://developer.huawei.com/consumer/cn/ 开发鸿蒙要用的软件是 DevEco Studio ArkTS建立在JS和TS的基础之上&#xff0c;扩展了声明式UI开发范式和状态管理&#xff0c;提供更简洁和自然的开发方式。 ArkTS引入了渲染引擎的增强&#xff0c…

centos7 linux下yum安装redis

安装redis 1.检查是否有redis yum 源 yum install redis2.下载fedora的epel仓库 yum install epel-release3.安装redis数据库 yum install redis4.安装完毕后&#xff0c;使用下面的命令启动redis服务 # 启动redis service redis start# 停止redis service redis stop# 查…

UOS、Linux下的redis的详细部署流程(适用于内网)

提示&#xff1a;适用于Linux以及UOS等内外网系统服务器部署。 文章目录 一.上传离线包二.部署基本环境三.解压并安装redis四.后台运行redis五.uos系统可能遇到的问题六.总结 一.上传离线包 1.自己去Redis官网下载适配自己部署系统的redis安装包。 2.通过文件传输工具&#xf…

精酿啤酒屋:畅饮与文化的交汇点

在城市的繁华之中&#xff0c;Fendi Club啤酒屋犹如一颗璀璨的明珠&#xff0c;吸引着无数寻求文化与享受的人们。它不仅仅是一个提供美酒佳肴的地方&#xff0c;更是一个文化和社交的交汇点。 走进Fendi Club&#xff0c;你会被它与众不同的环境所吸引。暗色调的装饰风格&…

Python机器学习赋能GIS:地质灾害风险评价的新方法论

地质灾害是指全球地壳自然地质演化过程中&#xff0c;由于地球内动力、外动力或者人为地质动力作用下导致的自然地质和人类的自然灾害突发事件。由于降水、地震等自然作用下&#xff0c;地质灾害在世界范围内频繁发生。我国除滑坡灾害外&#xff0c;还包括崩塌、泥石流、地面沉…

NO11 蓝桥杯单片机之DS18B20数字温度计

DS18B20数字温度计这个模块和以往单片机学习的模块可能不同&#xff0c;这里还要知道其头文件&#xff08;.h&#xff09;和.c文件代码的理解。 具体这个温度计是怎么实现检测温度的&#xff0c;呃呃呃呃呃这可能就要去查阅专业资料&#xff0c;涉及的知识体系应该很庞大&…

ABNDP: Co-optimizing Data Access and Load Balance in Near-Data Processing——论文泛读

ASPLOS 2023 Paper 论文阅读笔记整理 问题 近数据处理&#xff08;NDP&#xff09;是一种很有前途的体系结构范式&#xff0c;可以解决数据密集型应用程序的内存墙挑战。基于3D堆叠存储器的典型NDP系统包含大量并行处理单元&#xff0c;每个并行处理单元都可以访问其本地存储…

YOLOv9改进策略:block优化 | SEAM提升小目标遮挡物性能

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a;SEAM提升小目标遮挡物性能&#xff0c;在多个数据集得到很好的验证 改进结构图如下&#xff1a; YOLOv9魔术师专栏 ☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️ ☁️☁️☁️…