gpt4 book ai didi

javascript - typescript : react 事件类型

转载 作者:IT王子 更新时间:2023-10-29 02:46:47 27 4
gpt4 key购买 nike

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>似乎没有工作,因为我收到一个错误 namevalue不存在于 target .

非常感谢对所有事件提供更笼统的回答。

谢谢

最佳答案

SyntheticEvent接口(interface)是通用的:

interface SyntheticEvent<T> {
...
currentTarget: EventTarget & T;
...
}

(从技术上讲,currentTarget 属性位于父级 BaseSyntheticEvent 类型上。)

currentTarget 是通用约束和 EventTarget 的交集。
此外,由于您的事件是由输入元素引起的,因此您应该使用 ChangeEvent(in definition filethe react docs)。

应该是:

update = (e: React.ChangeEvent<HTMLInputElement>): void => {
this.props.login[e.currentTarget.name] = e.currentTarget.value
}

(注:本回答最初建议使用React.FormEvent,评论中的讨论与此建议相关,但如上所示应使用React.ChangeEvent .)

关于javascript - typescript : react 事件类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42081549/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com