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
上不存在。
非常感谢所有事件的更通用的答案。
谢谢
原文由 r.sendecky 发布,翻译遵循 CC BY-SA 4.0 许可协议
SyntheticEvent 接口是通用的:
(从技术上讲,
currentTarget
属性位于父 BaseSyntheticEvent 类型上。)currentTarget
是通用约束和EventTarget
的交集。此外,由于您的事件是由输入元素引起的,您应该使用
ChangeEvent
( 在定义文件 中, 反应文档 中)。应该:
(注:此答案最初建议使用
React.FormEvent
。评论中的讨论与此建议有关,但应使用React.ChangeEvent
如上所示。)