Javascript 反应+;打字稿:';反应';指UMD全局文件,但当前文件是模块。请考虑添加导入。(理由)

Javascript 反应+;打字稿:';反应';指UMD全局文件,但当前文件是模块。请考虑添加导入。(理由),javascript,reactjs,typescript,Javascript,Reactjs,Typescript,我们在当前项目中使用React和TypeScript,我遇到了以下行为 import React, { Component } from 'react'; 我将上面的一行替换为下面的一行,因为它似乎只使用Componentimport import { Component } from 'react'; 我被抛到了错误的下面 错误:“React”指的是UMD全局文件,但当前文件是模块。请考虑添加导入。< /P> 我试着在Stack和GitHub上查找它,发现很少有文章和讨论,但仍然不清楚为什

我们在当前项目中使用React和TypeScript,我遇到了以下行为

import React, { Component } from 'react';
我将上面的一行替换为下面的一行,因为它似乎只使用
Component
import

import { Component } from 'react';
我被抛到了错误的下面

错误:“React”指的是UMD全局文件,但当前文件是模块。请考虑添加导入。< /P> 我试着在Stack和GitHub上查找它,发现很少有文章和讨论,但仍然不清楚为什么会这样

会更感兴趣的是React或Typescript是否抛出它,以及为什么?不是解决它的方法


还有一些关于UMD的信息,为什么在这里使用它?

您是否在文件中呈现任何jsx?如果是这样,您确实需要导入React,因为这些jsx标记编译为对
React.createElement()
的调用。如果没有导入,React的引用将尝试引用全局变量,这将导致该错误

如果您使用的是eslint,我建议您使用eslint插件react并打开规则,这将捕获这种情况

方法取决于,
jsxFactory
选项默认为
React.createComponent
。这意味着

被传输到
React.createComponent('p')
,并且
React
预期存在于模块的范围内


如果没有
React
import,那么应该存在
React
global。

这意味着如果我在
render
方法中没有使用
tsx
,它会正常运行吗?另外,如果IMO react在将JSX传输到实际dom之前创建了一个完整的虚拟dom对象,这意味着在超级父级进行一次react导入应该可以吗?你也可以附上一些参考链接,这有助于更好地理解这个运输过程。我链接到手册。它与虚拟DOM或React的工作方式无关。如果在模块中使用JSX语法,可以确保将使用React.createElement,因此需要导入React,如果不使用JSX,则可能不需要导入它。根据经验,应该将其导入到.tsx文件中以避免此错误。谢谢,我将浏览链接并在需要时与您联系。希望在一段时间内保持未答复状态,以便其他人也可以提供他们的输入。请您在其他回答中回答我的评论,好吗?如果您不使用JSX,则不需要导入React。使用JSX的每个文件都需要自己的React导入。传输JSX是在构建时完成的,而不是在运行时;直到运行时才创建虚拟DOM。自React 17以来,JSX文件不再需要导入
React