ReactJS 给出错误 Uncaught TypeError: Super 表达式必须为 null 或函数,不能为 undefined
我正在使用reactjs。
当我在浏览器下方运行代码时说:
614076515
完全没有任何提示值得赞赏。
首先,用于编译代码的行:
910474262
和代码:
873982497
更新: 在此问题上燃烧了三天后,我发现我没有使用最新版本的React。
全球安装:
924022604
本地安装:
794821276
确保浏览器也使用正确的版本:
426158805
希望这可以挽救其他人三天的宝贵生命。
类名
首先,如果您确定您正在从正确命名的类扩展,例如 React.Component ,而不是 React.component 或 React.createComponent,则可能需要升级您的 React 版本。有关要扩展的类的更多信息,请参阅下面的答案。
升级 React
React 自 0.13.0 版以来仅支持 ES6 样式的类(请参阅他们关于支持介绍的官方博客文章 这里 。
在此之前,当使用:
class HelloMessage extends React.Component
您试图使用 ES6 关键字(
extends
)从未使用 ES6
class
定义的类中进行子类化。这可能是您在使用
super
定义等时遇到奇怪行为的原因。
所以,是的, TL;DR - 更新至 React v0.13.x。
循环依赖
如果您有循环导入结构,也会出现这种情况。一个模块导入另一个模块,反之亦然。在这种情况下,您只需重构代码即可避免这种情况。 更多信息
这意味着您想要子类化某个东西,它应该是
Class
,但却是
undefined
。原因可能是:
-
Class extends ...
中的拼写错误,因此您扩展了未定义的变量 -
import ... from
中的拼写错误,因此您从模块导入了undefined
-
引用的模块不包含您想要导入的值(例如过时的模块 - React 的情况),因此您导入了不存在的值(
undefined
) -
引用的模块
export ...
语句中的拼写错误,因此它导出了未定义的变量 -
引用的模块根本没有
export
语句,因此它只导出undefined
也可能是由于拼写错误造成的,因此,
Component
中的 C 不是大写,而是小写,例如:
React.component //wrong.
React.Component //correct.
注意:
此错误的来源可能是因为存在
React
,我们会自动认为接下来的应该是以小写字母开头的 react 方法或属性,但实际上它是另一个
Class
(
Component
),应该以大写字母开头。