javascript - 在这些格式中使用“事件”作为参数有什么区别?
问题描述
我的项目中有一个事件处理函数,它以“事件”作为唯一参数。项目中只有一种格式。例如,如果console.log
在函数体中添加一行,它将仅以第一种格式显示。
该框架是内部框架,基于 React,也使用 Web 组件。
这些格式有什么区别?
这三种格式都有相同的函数体。
格式 1,在我的项目中工作:
public sendClickEvent = ({ event: e }) => {
e.preventDefault();
// handler body
}
格式 2,不适用于我的项目:
public sendClickEvent = (event: any) => {
event.preventDefault();
// handler body
}
格式 3,不适用于我的项目:
public sendClickEvent(event: any): void {
event.preventDefault();
// handler body
}
解决方案
它看起来像是sendClickEvent
用一个对象调用的,它有一个名为 的属性event
。因此:
public sendClickEvent = ({ event: e }) => {
e.preventDefault();
之所以有效,是因为从 object 参数中{ event: e }
解构了属性并将事件放入名为. 但event
e
public sendClickEvent = (event: any) => {
event.preventDefault();
不起作用,因为参数是围绕它的对象包装器,而不是事件本身。你需要类似的东西
public sendClickEvent = (obj) => {
obj.event.preventDefault();
由于这是 TypeScript,我也强烈建议不要使用any
,因为这会有效地禁用类型检查,从而破坏了使用 TypeScript 的全部目的。找出应该调用函数的确切类型,然后按原样键入函数,这样您就不必在any
任何地方使用。也许类似于
public sendClickEvent = ({ event: e }: { event: React.MouseEvent }) => {
e.preventDefault();
推荐阅读
- cassandra - 转型 Pentaho 水壶卡住了
- python - 将列添加到熊猫多索引数据框
- c# - RSA算法加解密值
- magento - 如何在 Magento 2 中扩展文件?
- architecture - 如何构建 DAPP 区块链 EVM 应用程序?
- javascript - 在 html 和 css 中单击时图像模态或展开
- android - 如何在箭头按钮后面制作圆形背景(灰色透明),如标题上的 twitter 按钮?
- r - 将标准 XTS 对象转换为季节性图
- javascript - React Native 中关于 Context API 的完整解释
- scala - 如何按条件列对 spark 数据框组进行 map reduce?