React中事件的類型定義方式
React事件的類型定義
基本的事件類型
React 搞了一套自己的事件類型,所以你沒辦法使用 TypeScript 內(nèi)置提供的 MouseEvent 等等。在需要定義事件類型的時候,需要從 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 提供的事件類型有:
AnimationEvent
ChangeEvent
ClipboardEvent
CompositionEvent
DragEvent
FocusEvent
FormEvent
KeyboardEvent
MouseEvent
PointerEvent
TouchEvent
TransitionEvent
WheelEvent
還有一個 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四種定義事件方式
事件本身處的位置是一個屬性 如果屬性的值是一個函數(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 () {} 二者是等價的 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ù)定義的一個方法 */} <button onClick={this.add10}>加十</button> {/* 3.事件定義方式3:直接在組件內(nèi)定義一個非箭頭函數(shù)的方法,然后在render里直接使用`onClick={this.handleClick.bind(this)}` */} <button onClick={ this.add100.bind(this)}>加一百</button> {/* 4.事件定義方式4: 直接在組件內(nèi)定義一個非箭頭函數(shù)的方法,然后在constructor里bind(this)*/} <button onClick = { this.add1000Fn }>加1000</button> </> ); } }
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
react PropTypes校驗(yàn)傳遞的值操作示例
這篇文章主要介紹了react PropTypes校驗(yàn)傳遞的值操作,結(jié)合實(shí)例形式分析了react PropTypes針對傳遞的值進(jìn)行校驗(yàn)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2020-04-04React實(shí)現(xiàn)全局組件的Toast輕提示效果
這篇文章主要介紹了React實(shí)現(xiàn)全局組件的Toast輕提示效果,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09react+antd 遞歸實(shí)現(xiàn)樹狀目錄操作
這篇文章主要介紹了react+antd 遞歸實(shí)現(xiàn)樹狀目錄操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11VSCode 配置React Native開發(fā)環(huán)境的方法
本篇文章主要介紹了VSCode 配置React Native開發(fā)環(huán)境的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12