'React' 指的是一个 UMD 全局,但当前文件是一个模块

Raf*_*ael 28 javascript typescript reactjs create-react-app

我更新了我的项目以创建 react app 4.0,并且我正在放缓将我的文件移动到 TypeScript。我知道使用这个新版本,您不必重复从“react”导入 React。但是,在我未导入 React 的所有 TS 文件中,我收到此错误'React' refers to a UMD global, but the current file is a module. Consider adding an import instead.ts(2686)。我知道我可以通过导入 React 来修复它,但我认为这不再需要了。另外,有人可以解释这个错误的含义吗?

我的基本 TSX 文件

const Users = () => {
    return <>Teachers aka Users</>;
};

export default Users;
Run Code Online (Sandbox Code Playgroud)

KAR*_*LAN 145

添加

import React from 'react'
Run Code Online (Sandbox Code Playgroud)

修复了这个问题

  • 新的 JSX 不需要导入 React:[文档](https://reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html#:~:text=Note% 20how%20our%20original%20code%20did%20not%20need%20to%20import%20React%20to%20use%20JSX%20anymore!%20(但是%20we%20would%20still%20need%20to%20import%20React%20in%20order %20to%20使用%20Hooks%20或%20other%20exports%20that%20React%20提供。)) (58认同)
  • React import 解决了这个问题,不知道为什么。我们可能需要在这里进行一些澄清 (11认同)
  • 确实很奇怪。这个问题在这个项目中几周后才出现,在将该导入添加到相关类后,问题就消失了。我还按照 https://bobbyhadz.com/blog/react-refers-to-umd-global-but-current-file-is-module 之前的步骤更新了项目,但这不起作用。在哪里可以找到 tsconfig.json?我的项目似乎缺少它。 (2认同)
  • 添加正确的 tsconfig 后重新加载 vs code 就可以了,我们不需要导入 React (2认同)

Dan*_*lay 59

Create React App 在版本 4 中支持开箱即用的新 JSX 转换,但如果您使用自定义设置,则需要以下内容来消除在jsx不使用 的情况下编写时的 TypeScript 错误import React from 'react'

  • typescript 版本至少为 4.1 版
  • reactreact-dom至少版本 17
  • tsconfig.json必须有一个jsxcompilerOptionreact-jsxreact-jsxdev

例子:

// tsconfig.json
{
  "compilerOptions": {
    ...
    "jsx": "react-jsx"
    ...
  },
}
Run Code Online (Sandbox Code Playgroud)

可以在此处找到支持 React 17 JSX 工厂的 TypeScript 文档

  • 如果您已完成所有这些操作但仍然收到错误,请尝试关闭并重新打开 vscode。 (66认同)
  • 还值得一提的是,您应该在 `tsconfig.json` 中包含类似 `"include": ["**/*.tsx"]` 的内容来包含 `tsx` 文件。 (18认同)
  • 如果使用 Next 则不起作用。接下来在运行“npm run dev”时覆盖“jsx”选项。 (7认同)
  • 如果您已更新 IDE 但它仍然出现问题,重新启动 IDE 可能会有所帮助 (4认同)
  • 我有这个配置,在创建组件时我不需要 React 导入,但我必须添加它才能通过测试。我正在使用 RTL 和玩笑。 (3认同)

小智 39

Dan 写的是正确的,你可以更改 TS config.json

// tsconfig.json
{
  "compilerOptions": {
    ...
    "jsx": "react-jsx"
    ...
  },
}
Run Code Online (Sandbox Code Playgroud)

或者只需在文件 Component 中导入 React 就会出现错误:

import React from 'react'
Run Code Online (Sandbox Code Playgroud)


Jas*_*CFA 33

我这里的问题与 TypeScript 相关并且相似,但不完全相同,因为那些解决方案已经在本文中发布了。

什么问题

我添加了带有源代码的嵌套目录,这些目录未包含在我的tsconfig.json.

解决方案

这是我修复它的方法,只需添加额外的路径.ts.tsx路径即可,例如

// tsconfig.json
{
  "include": [
    "next-env.d.ts",
    "**/*.ts",
    "**/*.tsx",
    "**/**/*.ts",
    "**/**/*.tsx"
    "<path-to-your-source>.ts",
    "<path-to-your-source>.tsx",
  ],
}
Run Code Online (Sandbox Code Playgroud)

我的特定项目是 Next.js 项目。这是我的完整内容tsconfig.json

{
  "compilerOptions": {
    "sourceMap": true,
    "outDir": "dist",
    "strict": true,
    "lib": [
      "esnext"
    ],
    "esModuleInterop": true,
    "target": "es5",
    "allowJs": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "noEmit": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "jsx": "preserve",
    "incremental": true
  },
  "include": [
    "next-env.d.ts",
    "**/*.ts",
    "**/*.tsx",
    "**/**/*.ts",
    "**/**/*.tsx"
  ],
  "exclude": [
    "node_modules"
  ]
}
Run Code Online (Sandbox Code Playgroud)

上述绝大多数内容tsconfig.json是通过 Next.js 生成的

  • 这有效!结果我包含了“.ts”文件而不是“.tsx”文件。 (3认同)

Lir*_*n H 30

对于 macOS 上的 VSCode 用户,只需关闭并重新打开项目即可解决我的问题。

  • 它有效 - 但如果您想避免重新打开 VSCode:“CMD + SHIFT + P”并选择“&gt; 重新加载窗口”。 (12认同)

Mat*_*eng 28

此错误消息来自 TypeScript 编译器。Typescript 4.0 目前不支持 React 17 新的 jsx 转换,4.1 将支持。

TypeScript v4.1 Beta - React 17 JSX 工厂

  • 你好,既然 TypeScript 4.1 已经发布了,你是如何让它工作的呢?是“jsx”:“react-jsx”选项吗? (12认同)
  • @SenTisso 没错。如果您使用 VSCode,请确保选择正确的 TypeScript 版本。[链接](https://code.visualstudio.com/docs/typescript/typescript-compiling#_using-newer-typescript-versions) (2认同)

小智 21

检查您的文件 tsconfig.json

"compilerOptions": {
    ...
    "baseUrl": "src",
    ...
    "jsx": "react-jsx",
    ...
 },
Run Code Online (Sandbox Code Playgroud)

要在 VS Code 中重新加载打字稿服务器:

按 Ctrl+Shift+P(macOS 上为 Cmd+Shift+P)打开命令面板并键入 restart,然后选择命令“TypeScript:重新启动 TS 服务器”。


小智 18

我用这个修复了它:

{
  ...
  "compilerOptions": {
     ...
    "jsx": "react",
    "allowUmdGlobalAccess": true,
  }
}
Run Code Online (Sandbox Code Playgroud)


Mah*_*esh 7

就我而言,这与这些无关。

我使用的是 Visual Studio Code,并且我打开的文件夹不是位于包含 tsconfig.json 文件的根目录,而是位于 src 文件夹内的一层。

我收到错误:Parsing error: Cannot read file :C\MyProject\tsconfig.json.eslint

从而间接造成了'React' refers to a UMD global, but the current file is a module

在项目级别重新打开文件夹解决了该问题。:\