我正在使用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, {
AppRegistry,
Component,
Text,
View,
TouchableHighlight
} from 'react-native';
而不是
import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
View,
Image,
AsyncStorage
} from 'react-native';
类名
首先,如果你确定你从正确命名的类扩展,例如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。
循环依赖
如果您有循环导入结构,也会发生这种情况。一个模块导入另一个模块,反之亦然。在这种情况下,您只需要重构代码以避免这种情况。更多信息
在我的例子中,我使用了一个具有对等依赖关系的npm模块。该错误是由模块的webpack配置中错误的“外部”配置引起的:
externals: {
react: 'react',
react: 'prop-types',
},
它应该是:
externals: {
react: 'react',
['prop-types']: 'prop-types',
},