我正在使用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>

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


当前回答

如果你收到这个错误并且正在使用Browserify和Browserify -shim(就像在Grunt任务中),你可能会像我一样经历一个愚蠢的时刻,你无意中告诉Browserify -shim将React视为已经是全局命名空间的一部分(例如,从CDN加载)。

如果你想让Browserify包含React作为转换的一部分,而不是一个单独的文件,确保行" React": "global:React"不会出现在你的包中的" Browserify -shim"部分。json文件。

其他回答

对我来说,我忘记了违约。所以我写了导出类MyComponent而不是导出默认类MyComponent

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

class HelloMessage extends React.Component

class HelloMessage extends React.component

请查一下。

在我的例子中,使用react-native时,错误是我有

import React, {
  AppRegistry,
  Component,
  Text,
  View,
  TouchableHighlight
} from 'react-native';

而不是

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View,
  Image,
  AsyncStorage
} from 'react-native';

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

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

它也可能是由拼写错误引起的,所以你有一个小写C的Component,而不是大写C的Component,例如:

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

注意: 这个错误的来源可能是因为有React,我们自动认为接下来应该是一个React方法或属性,以小写字母开头,但实际上它是另一个类(组件),应该以大写字母开头。