【问题标题】:ThreeEvent and WheelEvent not recognised in TypeScript & react-three-fiber (@react-three/fiber)在 TypeScript 和 react-three-fiber (@react-three/fiber) 中无法识别 ThreeEvent 和 WheelEvent
【发布时间】:2022-01-04 10:51:53
【问题描述】:

我有一个带有onWheel 侦听器的基本网格框,我想将鼠标事件数据传递给处理函数。然而,TS 抛出了一系列不同的错误,并且似乎永远无法识别ThreeEventWheelEvent,无论我如何尝试使用它们。

在屏幕截图 1 中,您可以看到在 onWheel 属性中,TS 推断出 ThreeEvent<WheelEvent> 是事件类型。然而,当我尝试在我的处理函数中键入事件时,我收到一条错误消息,提示 three.js 没有导出成员 ThreeEvent(屏幕截图 2)。

我尝试通过命名导入(即import {ThreeEvent/WheelEvent} from "three";,并使用THREE.ThreeEvent 语法在react-three-fiber docs 上的示例中使用。此外,在此行上方,我成功输入了useRef像这样:const boxRef = useRef<THREE.Mesh>();

我的 tsconfig 是 create-react-app 模板中的基本配置,我的版本如下:

"dependencies": {
    "@react-three/fiber": "^7.0.19",
    "three": "^0.135.0",
    "typescript": "^4.1.2"
}
"devDependencies": {
    "@types/three": "^0.134.0"
}

【问题讨论】:

    标签: reactjs typescript three.js mouseevent react-three-fiber


    【解决方案1】:

    你应该安装 typescript 的类型。

    npm install --save @types/three
    

    之后类型应该可用。

    您的导入有问题,必须从“@react-three/fiber”导入 ThreeEvent,从“react”导入 WheelEvent。

    import { WheelEvent } from 'react';
    import { ThreeEvent } from '@react-three/fiber';
    

    【讨论】:

    • 我已经在我的devDependencies 中找到了它,就像我上面提到的那样。你是建议我把它移到dependencies 吗?我应该不需要,对吧?
    • devDependencies 应该足够了。试试这个: import {ThreeEvent, WheelEvent} from "three";然后代替 THREE.ThreeEvent 使用 ThreeEvent
    • 不幸的是,它们也不起作用。它们都未被识别:Module '"three"' has no exported member 'ThreeEvent'. WheelEvent 相同。
    • 我更新了我的解决方案,请尝试添加这样的导入
    • 它有效,谢谢。很不清楚这些类型应该来自哪里——WheelEvent 来自 React 是我永远猜不到的。
    猜你喜欢
    • 1970-01-01
    • 2019-10-27
    • 2020-10-31
    • 2021-07-02
    • 2021-08-20
    • 2022-01-25
    • 1970-01-01
    • 2021-10-18
    • 2021-05-13
    相关资源
    最近更新 更多