React中事件的類型定義方式
React事件的類型定義
基本的事件類型
React 搞了一套自己的事件類型,所以你沒(méi)辦法使用 TypeScript 內(nèi)置提供的 MouseEvent 等等。在需要定義事件類型的時(shí)候,需要從 React 中導(dǎo)入:
import React, { Component, MouseEvent } from 'react';
export class Button extends Component {
? handleClick(event: MouseEvent) {
? ? event.preventDefault();
? ? alert(event.currentTarget.tagName); // alerts BUTTON
? }
??
? render() {
? ? return (
? ? <button onClick={this.handleClick}>
? ? ? {this.props.children}
? ? </button>
? ? );
? }
}React 提供的事件類型有:
AnimationEventChangeEventClipboardEventCompositionEventDragEventFocusEventFormEventKeyboardEventMouseEventPointerEventTouchEventTransitionEventWheelEvent
還有一個(gè) SyntheticEvent,用于其他所有的事件。
限制性的事件類型
如果需要限制事件類型,可以利用事件類型的泛型:
import React, { Component, MouseEvent } from 'react';
export class Button extends Component {
? /*
? ?* 這里我們將 handleClick 限制只能是在 HTMLButton 元素上
? ?*/
? handleClick(event: MouseEvent<HTMLButtonElement>) {
? ? event.preventDefault();
? ? alert(event.currentTarget.tagName); // alerts BUTTON
? }
? /*?
? ?* 支持聯(lián)合類型
? ?*/
? handleAnotherClick(event: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) {
? ? event.preventDefault();
? ? alert('Yeah!');
? }
? render() {
? ? return <button onClick={this.handleClick}>
? ? ? {this.props.children}
? ? </button>
? }
}這里的限定的類型是 TypeScript 提供的 DOM 元素類型。
React四種定義事件方式
事件本身處的位置是一個(gè)屬性 如果屬性的值是一個(gè)函數(shù)
使用{}包裹,一定要保證該函數(shù)內(nèi)的this指向
import React, { Component } from 'react';
export default class App extends Component {
constructor(props) {
super(props);
this.add1000Fn = this.add1000.bind(this)
}
state = {
count:1
}
add10 = () => {
this.setState({count:this.state.count + 10})
}
add100 = function() { // 一般寫為 add100 () {} 二者是等價(jià)的
console.log(this);
this.setState({count:this.state.count + 100})
}
add1000() {
this.setState({count:this.state.count + 1000})
}
render() {
return (
<>
<div>count:{ this.state.count}</div>
{/* 1.事件定義方式1:直接在render里寫行內(nèi)的箭頭函數(shù) */}
<button onClick={ ()=>{
//如果該函數(shù)使用聲明式 function(){} 內(nèi)部的this指向?yàn)閡ndefined
this.setState({count:++this.state.count})
}}>加一</button>
{/* 2.事件定義方式2:在組件內(nèi)使用箭頭函數(shù)定義的一個(gè)方法 */}
<button onClick={this.add10}>加十</button>
{/* 3.事件定義方式3:直接在組件內(nèi)定義一個(gè)非箭頭函數(shù)的方法,然后在render里直接使用`onClick={this.handleClick.bind(this)}` */}
<button onClick={ this.add100.bind(this)}>加一百</button>
{/* 4.事件定義方式4: 直接在組件內(nèi)定義一個(gè)非箭頭函數(shù)的方法,然后在constructor里bind(this)*/}
<button onClick = { this.add1000Fn }>加1000</button>
</>
);
}
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用useMutation和React Query發(fā)布數(shù)據(jù)demo
這篇文章主要為大家介紹了使用useMutation和React Query發(fā)布數(shù)據(jù)demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
在React中實(shí)現(xiàn)分塊導(dǎo)出大量數(shù)據(jù)表格并壓縮成圖片的解決方案
在現(xiàn)代Web開發(fā)中,處理和展示大量數(shù)據(jù)是一個(gè)常見的挑戰(zhàn),特別是在使用React框架時(shí),我們經(jīng)常需要將這些數(shù)據(jù)以表格的形式展示,并提供導(dǎo)出功能,本文將介紹如何在React中實(shí)現(xiàn)一個(gè)高效、分塊導(dǎo)出大量數(shù)據(jù)表格,并將其壓縮為圖片的解決方案,需要的朋友可以參考下2024-12-12
React配置多個(gè)代理實(shí)現(xiàn)數(shù)據(jù)請(qǐng)求返回問(wèn)題
這篇文章主要介紹了React之配置多個(gè)代理實(shí)現(xiàn)數(shù)據(jù)請(qǐng)求返回問(wèn)題,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08
可定制React自動(dòng)完成搜索組件Turnstone實(shí)現(xiàn)示例
這篇文章主要為大家介紹了可定制React自動(dòng)完成搜索組件Turnstone實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
vite+react+tailwindcss的簡(jiǎn)單使用方式
這篇文章主要介紹了vite+react+tailwindcss的簡(jiǎn)單使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
關(guān)于React動(dòng)態(tài)加載路由處理的相關(guān)問(wèn)題
這篇文章主要介紹了關(guān)于React動(dòng)態(tài)加載路由處理的相關(guān)問(wèn)題,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01

