React + TypeScript:如何处理常见事件?

onClick 是用的最多的事件之一,这里主要列举两种类型的 onClick 事件:,button按钮的onClick事件;,任意元素的的onClick事件。,下面先来看看按钮的 onClick 事件,当点击按钮时,在页面显示按钮的名称:,可以看到,onClick 事件的事件处理对象的类型都定义为了 MouseEvent,其中传入的参数为绑定事件的元素的类型。可以通过事件对象的 currentTarget 属性来获取点击元素的属性。,在线体验:https://codesandbox.io/s/dawn-feather-8gofq1,再来看看任意元素的 onClick事件,点击一个元素时,在控制台打印点击元素的类型、长度、宽度:,可以看到,onClick 事件的事件处理对象的类型都定义为了 MouseEvent,其中传入的参数为绑定事件的元素的类型。需要注意,在任意元素上添加点击事件时,会触发事件冒泡,比如上面的例子,当点击是图片或者h1标签时就会导致其父元素div的点击事件触发。可以使用下面的代码来避免默认事件:,在线体验:https://codesandbox.io/s/serverless-glade-g41upi,下面来看看 onChange 事件,先来看 select 元素的 onChange 事件的例子,当选中元素时,选中元素的值会显示在页面上:,可以看到,select 元素的 onSelect 的事件对象类型为 ChangeEvent,传入的参数为 select 元素的类型。可以通过 target 属性来获取 select选中的值。,在线体验:https://codesandbox.io/s/frosty-lichterman-33fpky,input 元素的 onChange 事件的例子,在输入框中输入内容,点击搜索按钮,在页面显示搜索结果:,可以看到,这里input 的事件处理对象的类型为 ChangeEvent。要想获取输入的值需要从事件对象的 target 属性中获取。,在线体验:​​https://codesandbox.io/s/pedantic-murdock-lejmg6​​,onScroll 事件在元素的滚动条被滚动时触发。,下面来看一个例子,当元素发生滚动时,计算滚动了多少的元素,从而计算页面滚动进度的百分比值,并显示在页面上:,可以看到,onScroll 事件的事件对象类型定义为了:React.UIEvent<HTMLDivElement>,参数为绑定事件的元素的类型。可以通过事件对象的 currentTarget 属性来获取页面滚动的相关值。,在线体验:https://codesandbox.io/s/competent-hellman-qh7non,下面来看看表单的 onSubmit 事件,该事件在表单提交时触发:,表单提交事件的时间对象类型为 FormEvent。需要注意,为了防止页面在表单的 onSubmit事件触发时重新加载,需要调用:,在线体验:https://codesandbox.io/s/condescending-danny-e1eerd,下面来看看常见的复制、剪切、粘贴这三个时间:,下面来看一个例子,当进行复制、剪切、粘贴时,给操作的元素加上一些样式:,可以看到,这三个事件的事件处理对象的类型都定义为了 ClipboardEvent,其中传入的参数为绑定事件的元素的类型。可以通过 currentTarget 属性来获取事件对象的属性。,在线体验:https://codesandbox.io/s/sleepy-keldysh-w5vemj,onmouseover 和 onmouseout 是常用的两个鼠标事件:,下面来看一个例子,当鼠标在元素上和移出元素时给元素添加不同的样式:,可以看到,这两个事件的事件处理对象的类型都定义为了 MouseEvent,其中传入的参数为绑定事件的元素的类型。可以通过事件对象的 currentTarget 来获取事件对象的属性。,在线体验:​​https://codesandbox.io/s/nervous-cloud-5r6d6p​​,onLoad​ 和 onError 是页面外部资源加载相关的两个相关事件:,下面来看一个例子, 当图片成功时给它添加类名 success,加载失败时添加类型 error,并更换为备用图片的URL:,可以看到,这两个事件的事件处理对象的类型都定义为了 ​​SyntheticEvent​​​,其中传入的第一个参数为绑定事件的元素的类型。可以通过事件对象的 ​​currentTarget​​ 属性来获取事件对象的属性。,在线体验:​​https://codesandbox.io/s/determined-tamas-rjwjoq​​,下面来看几个常见的键盘事件:,这三个事件的执行顺序如下:,来看一个例子,按下ESC键可以清除已经输入的文本,按下Enter键可以弹出已经输入的文本:,这三个事件的事件对象类型都是 KeyboardEvent​。可以通过事件对象的 code属性获取按下的键盘键值。,在线体验:https://codesandbox.io/s/prod-sky-txwzgd,再来看一个简单的例子,通过在键盘上按下上下左右键使得盒子在页面上移动:,在线体验:​​https://codesandbox.io/s/hungry-meninsky-zhkbzb​​,下面来看一个例子,在输入框中输入内容,输入过程中保存输入的值, 当输入完成,失去输入焦点时,对输入内容进行校验:,这里两个事件的事件对象类型都是 FocusEvent​,传入的参数是 input 元素的类型。,在线体验:https://codesandbox.io/s/spring-moon-roegc5,拖拽操作在HTML5 是作为标准的一部分。能够使用HTML5所支持的事件和属性来实现拖拽操作。下面是三个常用的拖拽事件:,可以看到,两个拖拽事件的事件对象类型都是 DragEvent​。可以通过事件对象的 dataTransfer 来获取事件对象的属性。,在线体验:https://codesandbox.io/s/crazy-cloud-5jejr1,在 React 中是不支持直接定义 onResize​ 事件的。可以使用浏览器原生支持的 window.resize 事件,当浏览器窗口发生变化时会触发改事件。,可以使用以下两种方式之一来设置事件处理函数:,在 React 中,要在浏览器窗口大小发生变化时重新渲染组件,可以使用 ​​useState​​hook 来实现:,下面来看一个例子,在改变浏览器窗口的大小时,页面实时显示浏览器窗口的长度和宽度,并在不同宽度时显示不同的背景色:,在线体验:​​https://codesandbox.io/s/async-leaf-m62ixj​​,常见的 Event 事件对象如下:,常见的元素类型如下:

文章版权声明

 1 原创文章作者:cmcc,如若转载,请注明出处: https://www.52hwl.com/16926.html

 2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈

 3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)

 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年3月5日 上午12:00
下一篇 2023年3月7日 下午10:34