Jaki jest poprawny typ zdarzeń React. Początkowo użyłem tylko any
ze względu na prostotę. Teraz próbuję wszystko uporządkować i any
całkowicie unikać używania .
A więc w prostej formie, takiej jak ta:
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>
)
}
}
Jakiego typu używam tutaj jako typu wydarzenia?
React.SyntheticEvent<EventTarget>
nie wydaje się działać jak pojawia się błąd, że name
i value
nie istnieje na target
.
Doceniona byłaby bardziej uogólniona odpowiedź na wszystkie wydarzenia.
Dzięki
javascript
reactjs
typescript
r.sendecky
źródło
źródło
e.key
to tylko część wydarzeń na klawiaturze.Problem nie dotyczy typu zdarzenia, ale interfejs EventTarget w skrypcie ma tylko 3 metody:
Więc to prawda
name
ivalue
nie istnieje w EventTarget. To, co musisz zrobić, to rzutować element docelowy na określony typ elementu z potrzebnymi właściwościami. W tym przypadku tak będzieHTMLInputElement
.Również na imprezy zamiast React.SyntheticEvent, można również wpisać je w następujący sposób:
Event
,MouseEvent
,KeyboardEvent
... itd, zależy od przypadku korzystania z uchwytu.Najlepszym sposobem, aby zobaczyć wszystkie te definicje typów, jest pobranie plików .d.ts z obu maszynopisów i reakcji.
Sprawdź również poniższe łącze, aby uzyskać więcej wyjaśnień: Dlaczego Event.target nie jest elementem w skrypcie?
źródło
Aby połączyć odpowiedzi Nitzana i Edwina, stwierdziłem, że coś takiego działa dla mnie:
źródło
Myślę, że najprostszy sposób jest taki:
źródło
.ChangeEvent
był dla mnie kluczmożesz to zrobić w reakcji
źródło