Quel est le type correct pour les événements React. Au départ, je l'ai juste utilisé any
par souci de simplicité. Maintenant, j'essaie de nettoyer les choses et d'éviter any
complètement l' utilisation .
Donc, sous une forme simple comme celle-ci:
export interface LoginProps {
login: {
[k: string]: string | Function
uname: string
passw: string
logIn: Function
}
}
@inject('login') @observer
export class Login extends Component<LoginProps, {}> {
update = (e: React.SyntheticEvent<EventTarget>): void => {
this.props.login[e.target.name] = e.target.value
}
submit = (e: any): void => {
this.props.login.logIn()
e.preventDefault()
}
render() {
const { uname, passw } = this.props.login
return (
<div id='login' >
<form>
<input
placeholder='Username'
type="text"
name='uname'
value={uname}
onChange={this.update}
/>
<input
placeholder='Password'
type="password"
name='passw'
value={passw}
onChange={this.update}
/>
<button type="submit" onClick={this.submit} >
Submit
</button>
</form>
</div>
)
}
}
Quel type dois-je utiliser ici comme type d'événement?
React.SyntheticEvent<EventTarget>
ne semble pas fonctionner comme je reçois une erreur name
et value
n'existe pas sur target
.
Une réponse plus générale pour tous les événements serait vraiment appréciée.
Merci
la source
e.key
n'est qu'une partie des événements de clavier.Le problème ne vient pas du type Event, mais que l'interface EventTarget en typographie n'a que 3 méthodes:
Il est donc correct
name
etvalue
n'existe pas sur EventTarget. Ce que vous devez faire est de convertir la cible dans le type d'élément spécifique avec les propriétés dont vous avez besoin. Dans ce cas, ce sera le casHTMLInputElement
.De plus pour les événements au lieu de React.SyntheticEvent, vous pouvez également les saisir comme suit:
Event
,MouseEvent
,KeyboardEvent
... etc, dépend du cas d'utilisation du gestionnaire.La meilleure façon de voir toutes ces définitions de type est d'extraire les fichiers .d.ts à la fois du texte et de réagir.
Consultez également le lien suivant pour plus d'explications: Pourquoi Event.target n'est-il pas un élément dans Typescript?
la source
Pour combiner les réponses de Nitzan et d'Edwin, j'ai trouvé que quelque chose comme ça fonctionne pour moi:
la source
Je pense que le moyen le plus simple est que:
la source
.ChangeEvent
était la clé pour moitu peux faire comme ça en réagissant
la source