【问题标题】:'ReactPlayer' cannot be used as a JSX component'ReactPlayer' 不能用作 JSX 组件
【发布时间】:2021-02-20 08:11:51
【问题描述】:

我尝试在我的 React 项目中使用 react-player。我正在使用打字稿。我在构建它时收到以下错误:

'ReactPlayer' 不能用作 JSX 组件。 它的实例类型“ReactPlayer”不是有效的 JSX 元素。 'render()' 返回的类型在这些类型之间不兼容。 类型 'ReactNode' 不可分配给类型 'false |元素 |空值'。 类型“未定义”不可分配给类型“假 |元素 |空值'。 我怀疑它是 ReactPlayer 特有的。我可能错误地配置了项目。有什么帮助吗?

tsconfig.json

{
  "compilerOptions": {
    "target": "es5",
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": false,
    "forceConsistentCasingInFileNames": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react"
  },
  "include": [
    "src"
  ]
}

package.json

{
  "name": "home-exercise",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^4.2.4",
    "@testing-library/react": "^9.5.0",
    "@testing-library/user-event": "^7.2.1",
    "@types/jest": "^24.9.1",
    "@types/node": "^12.12.67",
    "@types/react": "^16.9.56",
    "@types/react-dom": "^16.9.8",
    "flexbox-react": "^4.4.0",
    "moment": "^2.29.1",
    "react": "^16.13.1",
    "react-dom": "^16.13.1",
    "react-player": "^2.6.2",
    "react-scripts": "3.4.3",
    "typescript": "^3.7.5"
  },

【问题讨论】:

  • 向我们展示ReactPlayer 将是一个好的开始。

标签: reactjs typescript create-react-app


【解决方案1】:

我基于examples from the library 创建了一个working example。我插入了你的tsconfig,一切似乎都正常。尝试将您的项目与那个项目进行比较。

import * as React from "react";
import ReactPlayer from "react-player";
import "./styles.css";

export default function App() {
  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <h2>Start editing to see some magic happen!</h2>
      <ReactPlayer url="https://www.youtube.com/watch?v=ysz5S6PUM-U" />
    </div>
  );
}

旁注;我很想看到你的import 声明ReactPlayer。该错误表明您没有导入您认为正在导入的内容。

【讨论】:

  • 我的导入语句是“import ReactPlayer from 'react-player';”。该项目由“npx create-react-app”引导
  • 我可以通过以下方式重现它: 1. npx create-react-app demo --template typescript 2. yarn add react-player 3. 使用 ReactPlayer。这一次,错误是 ``` 'ReactPlayer' cannot be used as a JSX component。它的实例类型“ReactPlayer”不是有效的 JSX 元素。 “ReactPlayer”类型缺少“ElementClass”类型的以下属性:render、context、setState、forceUpdate 和另外 3 个。 ```
  • 我不知道您使用的是哪个版本的 CRA,但我只是运行了这些命令,一切都适用于 v4.0.0。我使用npm 而不是yarn,但我发现这不太可能是导致问题的原因。需要更多信息。
  • 原来删除 "flexbox-react": "^4.4.0" 解决了这个问题。看起来 flexbox-react 使用了不同版本的反应类型,这会混淆打字稿。
  • 谢谢@jackie1,我只花了 5 个小时试图找出我的代码出了什么问题......结果我的包的一个子依赖项使用了不同版本的反应类型,这也为我解决了这个问题......希望我能给你一个可以接受的答案
猜你喜欢
  • 2021-06-02
  • 2022-06-20
  • 2021-09-13
  • 1970-01-01
  • 2022-08-22
  • 2022-06-11
  • 2022-06-14
  • 2022-10-21
  • 2022-06-15
相关资源
最近更新 更多