reactjs - 在函数调用中组合 React HTML DOM 事件时处理类型
问题描述
问题:有没有办法在 Typescript 中组合不同 HTML DOM 事件的类型?
(我知道我可以通过将我的函数拆分为两个不同的函数来避免这个错误,但我想避免这种情况)
我的组件看起来与此类似:
const TestComponent: React.FC = () => {
const handleFileChange = (e: React.DragEvent | React.SyntheticEvent) => {
const fileData = e.dataTransfer || e.target;
});
return (
<div>
<div onDrop={handleFileChange} />
<input type="file" onChange={handleFileChange} />
</div>
)};
我得到的错误e.dataTransfer
在函数内部handleFileChange
:
Property 'dataTransfer' does not exist on type 'SyntheticEvent<Element, Event> | DragEvent<Element>'.
Property 'dataTransfer' does not exist on type 'SyntheticEvent<Element, Event>'.
我了解此错误以及为什么会发生这种情况,但是我找不到使用打字稿执行此操作的解决方法,我应该查看任何文档参考吗?
解决方案
你可以尝试这样的事情。
const TestComponent: React.FC = () => {
// you can use any value you want as `type`
const handleFileChange = (type: "input" | "drop", e: React.DragEvent | React.SyntheticEvent) => {
if (type === "drop") {
const fileData = (e as React.DragEvent).dataTransfer
}
if (type === "input") {
const target = e.target
}
// if there are any other events
}
return (
<div>
<div onDrop={handleFileChange.bind(null, "drop")} />
<input type="file" onChange={handleFileChange.bind(null, "input")} />
</div>
)
}
只需将类型绑定到事件,因此对于每种event
类型,您都可以决定要做什么。
推荐阅读
- excel - 将标题行大于 0 的所有列输出到另一张纸上
- node.js - 如何在反应组件中进入下一页?
- java - java 库插件 - gradle
- android - 可以毫无问题地构建,但部署到 Android 设备时出现 NoSuchMethodError 异常
- c# - 如何创建多层次的 JSON 对象?
- php - mysqli_fetch_array() 中的警告
- functional-programming - 关于 Agda 中的平等
- php - PHP如何获取文件读取下一个lLine
- machine-learning - 有没有办法将自定义测试数据传递到 XGBoost 预测模型中?
- java - 有人可以解释一下,java递归是如何工作的,特别是在下面的这个程序中?