我这是这样知道 React TS 中的 Event Handler 类型的

news2024/11/26 18:42:18

开头

现在 TypeScript 的发展也越来越成熟,已逐渐应用到我们开发的前端项目之中,它能够带来类型提示,提前规避类型上的错误,来提高项目代码的健壮性,以及更高效的编码效率,前提就是我们需要定义好相应的类型,才能更好的拥有代码上的类型提示。

记得在 React 项目中刚使用 ts 的时候,遇到事件的 Event Handler 中的 e 不知道它怎么去定义,现在来从新盘点一下 React TS 中的 Event Handler 。

就比如下面没有给它定义类型,TS 编译器就会提示错误:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g4tQxROm-1673854026780)(React%20TS%20%E4%B8%AD%E7%9A%84%20Event%20Handler%20658cec456c2a4fc38c1ba25866e27988/Untitled.png)]

开始 开始 !!

onCLick 事件

这个是最常用的一个事件名称,这里没什么好说的,它的 event 类型也比较少需要去特殊定义,但是可以了解一下,它的类型为:React.MouseEvent<T> ,它并且接收一个泛型,也就是元素类型。

所有的事件类型都接收一个泛型。

import { MouseEvent } from "react";
 
function App() {
  const handleClick = (e: MouseEvent<HTMLButtonElement>) => {
    
  };
  return (
    <div className="App">
      <button onClick={handleClick}>onClick</button>
    </div>
  );
}

注意:MouseEvent 不是自带的,而是需要从 react 库中引入,因为 react 内部自己写了一套合成事件系统。简单说一下,本质上在元素上定义 onClick 不会通过 addEevntListener 绑定到当前元素上,而是绑定在根元素 app 上,通过事件机制来执行,减少浏览器内存,也是 react 做的一个优化点,也更好控制内部应用所有的事件。

〈HTMLButtonElement〉 如果是 div 过着其他的 元素就将 Button 替换成 HTMLDivElement 即可。

onChange 事件

记得刚上手 TS 项目中写表单,第一个就查的它的 event 什么类型,它的类型就是:React.ChangeEvent<HTMLInputElement>

import { ChangeEvent } from "react";

function App() {
  const handleChange = (e: ChangeEvent<HTMLInputElement>) => {
    console.log(e.target.value);
  };
  return (
    <div className="App">
      <input placeholder="TS Event Handler" onChange={handleChange} />
    </div>
  );
}

onKeyDown 事件

键盘事件,也是逃不过的回车事件方法调用。它的类型的为:React.KeyboardEvent<HTMLInputElement>

import { KeyboardEvent } from "react";

function App() {
  const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {
    if (e.keyCode === 13) {
      console.log("回车了");
    }
  };
  return (
    <div className="App">
      <input placeholder="TS Event Handler" onKeyDown={handleKeyDown} />
    </div>
  );
}

onSubmit 事件

表单提交事件类型,它的类型的为:React.FormEvent<HTMLFormElement>

import { FormEvent } from "react";

function App() {
  const handleSubmit = (e: FormEvent<HTMLFormElement>) => { 

  };
  return (
    <div className="App">
      <form onSubmit={handleSubmit}>

      </form>
    </div>
  );
}

onDrop 拖拽事件

我遇到使用的地方就是拖拽文件上传,还有就是拖拽内容更改位置。它的事件类型为:React.DragEvent<HTMLElement>

import { DragEvent } from "react";

function App() {
  const handleDrop = (e: DragEvent<HTMLElement>) => { 

  };
  return (
    <div className="App" onDrop={handleDrop}>

    </div>
  );
}

遇到新的 Event 那么类型怎么查看?

这里直接鼠标 hover 到事件名上,TS 编译器就会提示出来,比如下面👇:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VOLede4h-1673854026781)(React%20TS%20%E4%B8%AD%E7%9A%84%20Event%20Handler%20658cec456c2a4fc38c1ba25866e27988/Untitled%201.png)]

此时就知道 event 类型就是 React.DragEvent<HTMLDivElement> 了,去掉后面 Handler 即可。

往后就不用像刚开始接触 React + TS 项目的时候去一个个查了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

创客匠人赋能线上瑜伽健身实现流量增长

近年来&#xff0c;我国的儿童、成年人肥胖率逐年攀升。身边发胖的人越来越多&#xff0c;尤其是步入中年的人群&#xff0c;很多都有“发福”的现象。 超重肥胖已经成为影响我国居民健康的重要公共卫生问题。在身材焦虑和疫情肆虐下&#xff0c;很多人开始重视自己的健康问题…

python学习笔记---Python基础【廖雪峰】

Python基础 数据类型和变量 整数 对于很大的数&#xff0c;例如10000000000&#xff0c;很难数清楚0的个数。Python允许在数字中间以_分隔&#xff0c;因此&#xff0c;写成10_000_000_000和10000000000是完全一样的。十六进制数也可以写成0xa1b2_c3d4。 >>> prin…

Qt opencv编译详细教程(windows版)

在Qt中使用opencv这个算法视觉库&#xff0c;前期环境步骤搭建如下&#xff1a; 1、下载cmake。 2、下载opencv库&#xff0c;我这里下载的是opencv-3.3.1版本。 3、没有安装Qt的下载Qt软件&#xff0c;Qt的环境安装部署&#xff0c;这里不做介绍。 4、安装cmake后&#xff0c;…

python学习笔记---IO编程【廖雪峰】

IO编程 ​ IO在计算机中指Input/Output&#xff0c;也就是输入和输出。由于程序和运行时数据是在内存中驻留&#xff0c;由CPU这个超快的计算核心来执行&#xff0c;涉及到数据交换的地方&#xff0c;通常是磁盘、网络等&#xff0c;就需要IO接口。 ​ IO编程中&#xff0c;S…

冒泡排序算法的实现和优化~

冒泡排序算法&#xff1a; 算法思想&#xff1a; 反复扫描待排序记录序列&#xff0c;在扫描的过程中&#xff0c;顺次比较相邻的两个元素的大小&#xff0c;若逆序就交换位置 文字描述该算法&#xff1a; 以升序为例&#xff1a; 依次比较数组中相邻两个元素大小&#xf…

win10+ubuntu23.04双系统安装

win10win10先安装好&#xff08;确保主板上各个螺丝稳定&#xff0c;至少4对螺丝铜柱&#xff0c;否则会各种蓝屏&#xff09;如果双系统安装失败了&#xff0c;连win10都进不去了&#xff0c;用原版ISO刻录的U盘或者光驱来修复引导。Easybcd安装Ubuntu23.04使用的ubuntu镜像文…

【项目实战】使用Java Keytool工具生成的CSR给第三方云平台签名

一、背景 客户要求我们提供一个CSR文件&#xff0c;给他们签名&#xff0c;他们的服务器是部署在Amazon上的。 二、Keytool是什么&#xff1f; Keytool 是一种 Java中的数字证书管理工具&#xff0c;用于管理密钥和证书。 它可以用来生成/申请数字证书、导入证书、导出证书、…

优秀的程序员是如何做好时间管理的

程序员是一项既消耗脑力&#xff0c;又消耗体力的职业&#xff0c;想成为一名成功的程序员&#xff0c;不仅要靠坚持不懈的努力&#xff0c;异于常人的天赋&#xff0c;更需要一套行之有效的时间管理方法&#xff0c;才能让自己在有限的时间内写出更好的代码&#xff0c;获得更…

用C语言图形库画一个红色爱心

这次我教大家用代码画一个心&#xff0c;这样你们就可以送给你们的女&#xff08;男&#xff09;朋友了。没找到对象的也可以用来表白啊。1.首先&#xff0c;我去百度找了心形线的函数&#xff0c;如下&#xff1a;2. 联系高中的数学知识&#xff0c;我们知道&#xff1a;f(x)&…

Unidbg模拟执行某段子so实操教程(二) LoadSo对比

一、目标 上篇文章里面&#xff0c;我们跑出来的结果有点不对头&#xff0c;多个一个 ABC。 这次我们试试用 LoadSo的方式来排查下问题。 参考&#xff1a; [借鸡生蛋之SandHook的使用(一)] 二、步骤 我们先用Android Studio 4.0 来编译一个so 打开AS&#xff0c;然后用向…

蓝桥杯STM32G431RBT6学习——按键

蓝桥杯STM32G431RBT6学习——按键 前言 按键同样为每年的必考考点&#xff0c;国信长天开发板中的按键电路如下&#xff1a; 芯片的PA0、PB0、PB1、PB2作为按键输入引脚&#xff0c;并采用外部上拉连接&#xff0c;当对应引脚检测到低电平时&#xff0c;即按键被按下。 STM…

【2293. 极大极小游戏】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一个下标从 0 开始的整数数组 nums &#xff0c;其长度是 2 的幂。 对 nums 执行下述算法&#xff1a; 设 n 等于 nums 的长度&#xff0c;如果 n 1 &#xff0c;终止 算法过程。否则&#xf…

【自学Docker】Docker环境命令

Docker info命令 Docker info命令概述 用于查看 docker 容器的基本信息。 Docker info命令语法 haicoder(www.haicoder.net)# docker info案例 查看所有信息 使用 docker info 命令&#xff0c;查看当前 docker容器 的所有的信息。 haicoder(www.haicoder.net)# docker …

系分 - 案例分析 - 数据库设计(分布式)

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录系分 - 案例分析 - 数据库设计&#xff08;分布式&#xff09;分布式数据库系统透明性分类两阶段提交协议2PC分区分表分库分区技术数据库主从复制NoSQL非关系型数据库与关系型数据库对比类型缓存技术Redis…

git恢复误删除的代码模块

git恢复误删除的代码模块前言环境问题描述原先的仓库详情&#xff1a;最新的仓库详情&#xff1a;问题解决注意事项前言 寒假回家边聊天边进行代码上传&#xff0c;出现了冲突之后&#xff0c;不小心删除了一大片代码。这里记录一下解决方案。 环境 IDEA、Git 问题描述 代…

Cesium实战记录(八)三维风场+风速热力图(水平+垂直)

目录 老规矩首先看下效果 一、风场 1、数据 2、原理剖析 首先&#xff0c;第一步就是构造网格数据 然后&#xff0c;撒粒子 再然后&#xff0c;起风吧 二、热力场 老规矩首先看下效果 风场v1.0&#xff08;平面版&#xff0c;只有U V 方向风速&#xff09; 三维风场&am…

JS逆向之补环境过瑞数详解

JS逆向之补环境过瑞数详解 “瑞数” 是逆向路上的一座大山&#xff0c;是许多JS逆向者绕不开的一堵围墙&#xff0c;也是跳槽简历上的一个亮点&#xff0c;我们必须得在下次跳槽前攻克它&#xff01;&#xff01; 好在现在网上有很多讲解瑞数相关的文章&#xff0c;贴心的一步…

英伟达Flex-unity插件

好像有这么个库&#xff0c;可以用来流体仿真 官网是这个&#xff1a;NVIDIA FleX | NVIDIA 开发者 问题 但是现在好像没了&#xff1a; NVIDIA FleX for Unity (1.0 BETA) | 物理 | Unity Asset Store 百度 Unity 8.Oct.2021 Unfortunately, NVIDIA FleX for Unity (1.0 …

完美Crack:Froala Editor 4.0.16 Patch

基于 Web 的 JavaScript/HTML WYSIWYG 文本编辑器。 Froala Editor 是一个用 JavaScript 编写的轻量级 WYSIWYG HTML 编辑器&#xff0c;可为您的应用程序启用富文本编辑功能。使用简单&#xff0c;许多功能不必用数百个按钮让用户不知所措。编辑器的智能工具栏可以在一个简单的…

ESP-IDF:基于企业链表实现的循环链表实例,实现了初始,插入,循环打印的功能

例程&#xff1a; /* circle链表基于企业链表*/ // 链表节点 typedef struct CIRCLENODE { CIRCLENODE *next; } circleNode; typedef struct CIRCLELIST { circleNode head; int size; } circleList; circleList *Inital_CircleList() { circleList *cp (circleList *)mal…