Какой тип подходит для событий React. Изначально я просто использовал any
для простоты. Теперь я пытаюсь навести порядок и полностью отказаться от использования any
.
Итак, в такой простой форме:
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>
)
}
}
Какой тип я использую здесь как тип события?
React.SyntheticEvent<EventTarget>
не кажется , не работает , как я получаю сообщение об ошибке , что name
и value
не существует на target
.
Было бы очень полезно получить более общий ответ на все события.
Спасибо
javascript
reactjs
typescript
r.sendecky
источник
источник
e.key
это только часть событий клавиатуры.Проблема не в типе события, а в том, что интерфейс EventTarget в машинописном тексте имеет только 3 метода:
Так что это правильно
name
иvalue
не существует в EventTarget. Что вам нужно сделать, так это привести цель к определенному типу элемента с нужными вам свойствами. В этом случае так и будетHTMLInputElement
.Кроме того, для событий вместо React.SyntheticEvent, вы можете также ввести их следующим образом :
Event
,MouseEvent
,KeyboardEvent
... и т.д., в зависимости от случая использования обработчика.Лучший способ увидеть все эти определения типов - это проверить файлы .d.ts как в typescript, так и в React.
Также перейдите по следующей ссылке для получения дополнительных объяснений: Почему Event.target не является элементом в Typescript?
источник
Чтобы объединить ответы Ницана и Эдвина, я обнаружил, что у меня работает что-то вроде этого:
источник
Я думаю, что самый простой способ:
источник
.ChangeEvent
был для меня ключомвы можете сделать это в реакции
источник