javascript - “(事件:字符串)=> void”类型的参数不可分配给“EventListenerOrEventListenerObject”类型的参数
问题描述
我在我的 div 中添加了一个事件监听器。
componentWillMount() {
document.addEventListener('keyPress', this.handleKey, false)
}
componentWillUnmount() {
document.removeEventListener('keyPress', this.handleKey, false)
}
这是我的功能:
handleKey = (event: string) => {
console.log(event)
}
render(){
return(
<div className={classes.scAccountDropDown} onKeyDown={(event: any) => this.handleKey(event.key)}>
)
但是在编译后我得到“类型的参数'(事件:字符串)=> void'不可分配给类型'EventListenerOrEventListenerObject的参数。”
解决方案
这里的问题是render
你在内部string
作为参数传递给handleKey
函数:
onKeyDown={(event: any) => this.handleKey(event.key)}
但是,在componentWillMount
和componentWillUnmount
您都将实际KeyboardEvent
事件传递给handleKey
函数,这导致了这个问题。您可以通过更新它们来解决这个问题:
componentWillMount() {
document.addEventListener('keyPress', (e: any) => this.handleKey(e.key), false)
}
componentWillUnmount() {
document.removeEventListener('keyPress', (e: any) => this.handleKey(e.key), false)
}
您还可以更新handleKey()
函数以明确您将key
作为此函数的参数,而不是实际事件。
handleKey = (key: string) => {
console.log(key)
}
推荐阅读
- sql - 为什么在表 (acct_trans) 中插入事务详细信息时出现 oracle 存储过程错误?
- sql-server - sql中的多个数据库创建脚本
- python - 使用日期时间作为键的嵌套字典中的 Python 字典 TypeError
- android - 热重载不起作用,需要热重启Flutter
- python - 从包含给定字数最大值的字符串列表创建子列表
- html - 我不知道如何解决这个悬停效果
- python-3.x - 通过Thonny中的Pico从pyserial问题名称错误导入序列
- haskell - 从安全货币中存储价值
- javascript - 如何连接 Mobx6 商店以响应 15.8 组件?'Uncaught Invariant Violation,Hooks 只能在函数组件的内部调用''
- typescript - 如何使对象内部的属性成为类型