¿Cuál es el tipo correcto de eventos React? Inicialmente solo lo usé any
por simplicidad. Ahora, estoy tratando de limpiar las cosas y evitar su uso por any
completo.
Entonces, en una forma simple como esta:
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>
)
}
}
¿Qué tipo utilizo aquí como tipo de evento?
React.SyntheticEvent<EventTarget>
no parece estar funcionando como consigo un error que name
y value
no existen en target
.
Se agradecería mucho una respuesta más generalizada para todos los eventos.
Gracias
javascript
reactjs
typescript
r.sendecky
fuente
fuente
e.key
es solo una parte de los eventos de teclado.El problema no es con el tipo de evento, sino que la interfaz EventTarget en mecanografiado solo tiene 3 métodos:
Entonces es correcto
name
yvalue
no existe en EventTarget. Lo que debe hacer es convertir el destino en el tipo de elemento específico con las propiedades que necesita. En este caso lo seráHTMLInputElement
.También para eventos en lugar de React.SyntheticEvent, también puede escribir como siguiente:
Event
,MouseEvent
,KeyboardEvent
... etc, depende del caso de uso del manipulador.La mejor manera de ver todas estas definiciones de tipos es verificar los archivos .d.ts tanto de mecanografiado como de reaccionar.
Consulte también el siguiente enlace para obtener más explicaciones: ¿Por qué Event.target no es Element en Typecript?
fuente
Para combinar las respuestas de Nitzan y Edwin, descubrí que algo como esto funciona para mí:
fuente
Creo que la forma más sencilla es que:
fuente
.ChangeEvent
fue la clave para mípuedes hacer esto en reaccionar
fuente