我正在使用ReactJS。

当我运行下面的代码时,浏览器会显示:

Uncaught TypeError:超级表达式必须为null或函数,不能为undefined

任何关于哪里出了问题的提示都会让我感激不尽。

首先是用来编译代码的行:

browserify -t reactify -t babelify examples/temp.jsx  -o examples/public/app.js

代码是:

var React = require('react');

class HelloMessage extends React.Component {
  render() {
    return <div>Hello </div>;
  }
}

更新: 在这个问题上在地狱火里燃烧了三天之后,我发现我没有使用react的最新版本。

全球安装:

sudo npm install -g react@0.13.2

在本地安装:

npm install react@0.13.2

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

<script type="text/javascript" src="react-0.13.2.js"></script>

希望这能挽救别人三天宝贵的生命。


当前回答

对于那些使用react-native的人:

import React, {
  Component,
  StyleSheet,
} from 'react-native';

可能产生此错误。

而直接引用react是更稳定的方法:

import React, { Component } from 'react';
import { StyleSheet } from 'react-native';

其他回答

这个答案不正确,但对于其他有同样错误的人,我这个愚蠢的错误可能会有帮助。

愚蠢的是,我的问题是通过在类名后面包含()来使用函数符号。

确保语法正确。并且您已经导入和导出了所有具有正确名称和路径的外部组件/模块。

如果你安装了一个新版本的react,这个模板应该可以正常工作:

import React, { Component } from 'react'

class ExampleClass extends Component {

    render(){
        return(
            <div>

            </div>
        )
    }
}

export default ExampleClass 

组件名称可能存在拼写/大小写错误: 例如:

class HelloMessage extends React.Component

class HelloMessage extends React.component

请查一下。

对其他人来说,这可能会导致这个问题。你也可以检查React中的component方法。Component是大写的。我也有同样的问题,原因是我写道:

class Main extends React.component {
  //class definition
}

我把它改成

class Main extends React.Component {
  //class definition
}

一切都很顺利

可能是第三方程序造成的。 在我们的例子中,它是反应-炫目。 我们有类似于@steine的设置(见上面的答案)。

为了找到有问题的包,我使用生产模式在本地运行webpack构建,因此能够在堆栈跟踪中找到有问题的包。 所以这为我们提供了解决方案,我能够保持丑陋。

类名

首先,如果你确定你从正确命名的类扩展,例如React。Component,而不是React. Component或React。createComponent,你可能需要升级你的React版本。有关要扩展的类的更多信息,请参阅下面的回答。

升级的反应

React从0.13.0版本开始只支持es6风格的类(请参阅他们的官方博客中关于支持介绍的文章)。

在此之前,使用时:

class HelloMessage extends React.Component

你试图使用ES6关键字(扩展)从一个没有使用ES6类定义的类的子类。这可能就是为什么你会遇到一些带有超定义的奇怪行为。

所以,是的,TL;DR -更新到React v0.13.x。

循环依赖

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