Qual é o tipo correto para eventos React. Inicialmente eu apenas usei any
por uma questão de simplicidade. Agora, estou tentando limpar as coisas e evitar o uso any
completo.
Então, de uma forma simples 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>
)
}
}
Que tipo eu uso aqui como tipo de evento?
React.SyntheticEvent<EventTarget>
não parece estar funcionando como eu recebo um erro que name
e value
não existem no target
.
Uma resposta mais generalizada para todos os eventos seria realmente apreciada.
obrigado
javascript
reactjs
typescript
r.sendecky
fonte
fonte
e.key
é apenas parte dos eventos do teclado.O problema não é com o tipo de evento, mas com a interface EventTarget em texto datilografado apenas com três métodos:
Portanto, é correto
name
evalue
não existe no EventTarget. O que você precisa fazer é converter o destino no tipo de elemento específico com as propriedades necessárias. Nesse caso, seráHTMLInputElement
.Também para eventos em vez de React.SyntheticEvent, você também pode digitá-los da seguinte forma:
Event
,MouseEvent
,KeyboardEvent
... etc, depende do caso de uso do manipulador.A melhor maneira de ver todas essas definições de tipo é fazer o check-out dos arquivos .d.ts do datilografado e reagir.
Verifique também o link a seguir para obter mais explicações: Por que Event.target não é elemento no texto datilografado?
fonte
Para combinar as respostas de Nitzan e Edwin, descobri que algo assim funciona para mim:
fonte
Eu acho que a maneira mais simples é que:
fonte
.ChangeEvent
foi a chave para mimvocê pode fazer assim em reagir
fonte