开发者问题收集

ReactJS 给出错误 Uncaught TypeError: Super 表达式必须为 null 或函数,不能为 undefined

2015-05-08
399112

我正在使用reactjs。

当我在浏览器下方运行代码时说:

614076515

完全没有任何提示值得赞赏。

首先,用于编译代码的行:

910474262

和代码:

873982497

更新: 在此问题上燃烧了三天后,我发现我没有使用最新版本的React。

全球安装:

924022604

本地安装:

794821276

确保浏览器也使用正确的版本:

426158805

希望这可以挽救其他人三天的宝贵生命。

3个回答

类名

首先,如果您确定您正在从正确命名的类扩展,例如 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。

循环依赖

如果您有循环导入结构,也会出现这种情况。一个模块导入另一个模块,反之亦然。在这种情况下,您只需重构代码即可避免这种情况。 更多信息

Jack Preston
2015-05-11

这意味着您想要子类化某个东西,它应该是 Class ,但却是 undefined 。原因可能是:

  • Class extends ... 中的拼写错误,因此您扩展了未定义的变量
  • import ... from 中的拼写错误,因此您从模块导入了 undefined
  • 引用的模块不包含您想要导入的值(例如过时的模块 - React 的情况),因此您导入了不存在的值( undefined
  • 引用的模块 export ... 语句中的拼写错误,因此它导出了未定义的变量
  • 引用的模块根本没有 export 语句,因此它只导出 undefined
Rudolf Gröhling
2016-02-26

也可能是由于拼写错误造成的,因此, Component 中的 C 不是大写,而是小写,例如:

React.component //wrong.
React.Component //correct.

注意: 此错误的来源可能是因为存在 React ,我们会自动认为接下来的应该是以小写字母开头的 react 方法或属性,但实际上它是另一个 Class Component ),应该以大写字母开头。

ismnoiet
2016-09-23