reactjs给出错误Uncaught TypeError:超级expression式必须为null或函数,而不是未定义的

我正在使用reactjs。

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

Uncaught TypeError:超级expression式必须为null或函数,而不是未定义的

任何暗示什么是错的将不胜感激。

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

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>; } } 

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

全局安装:

 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.Component ,而不是React.component或React.createComponent)进行扩展,则可能需要升级React版本。 请参阅下面的答案以获取有关要从中延伸的类的更多信息。

升级反应

自0.13.0版本以来,React只支持ES6风格的类(请参阅其官方博客上的支持介绍。

在此之前,使用时:

 class HelloMessage extends React.Component 

您试图使用ES6关键字( extends )来从没有使用ES6 class定义的类进行子class 。 这可能就是为什么你用super定义的方式遇到奇怪的行为

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

循环依赖

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

这意味着你想要子类的东西,应该是Class ,但是undefined 。 原因可能是:

  • Class extends ... ,所以你扩展未定义的variables
  • import ... from ,所以你从模块导入undefined
  • 引用的模块不包含值,你想导入(例如,过时的模块 – 与React的情况下),所以你导入不存在的价值( undefined
  • 在引用的模块export ...语句中input错误,所以它导出未定义的variables
  • 所引用的模块完全缺lessexport语句,所以它的输出只是undefined

它也可能是由于input错误造成的,所以不是使用大写C的Component ,而是使用较低的c component ,例如:

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

在我的情况下,与反应本土,错误是我有

 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'; 

我错过了JSX类的导出语句时遇到过这种情况。

例如:

 class MyComponent extends React.Component { } export default MyComponent // <- add me 

对于任何其他人,这可能会发展这个问题。 您也可以检查React.Component中的component方法是否大写。 我有同样的问题,是什么原因导致我写道:

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

我改变了

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

一切运作良好

如果您试图在类定义中使用错误的()执行React.Component ,您也可以收到此React.Component

 export default class MyComponent extends React.Component() {} ^^ REMOVE 

当我从一个无状态的function组件转换到一个类时,我有时可以做到这一点。

我有看到这个错误,当你有一个循环依赖。

 class A extends B {} class B extends C {} class C extends A {} 

当我在导入时遇到错字时,我得到了这个:

 import {Comonent} from 'react'; 

检查你扩展的类实际上是否存在,很lessReact方法被折旧,也可能是一个Typo错误'React.Components'而不是'React.Component'

祝你好运!!

我有同样的问题,只需从Navigator{Navigator}

 import Navigator from 'react-native-deprecated-custom-components' // to import {Navigator} from 'react-native-deprecated-custom-components' 

我将提供另一个可能的解决scheme,一个为我工作的解决scheme。 我正在使用便利索引来收集所有组件到一个文件。

我不相信在撰写本文的时候,这是由babel正式支持的,并且把打字稿打成一个旋转 – 但是我已经看到它在很多项目中使用,绝对方便。

但是,当与inheritance结合使用时,似乎会抛出上述问题中提出的错误。

一个简单的解决scheme是,作为父母的模块需要直接导入,而不是通过便利的索引文件。

./src/components/index.js

 export Com1 from './com-1/Com1'; export Com2 from './com-2/Com2'; export Com3 from './com-3/Com3'; export Parent1 from './parent/Parent1'; 

./src/components/com-1/Com1.js

 import { Com2, Com3 } from '../index'; // This works fine class Com1 { render() { return ( <div> <Com2 {...things} /> <Com3 {...things} /> </div> ); } } 

./src/components/com-3/Com3.js

 import { Parent } from '../index'; // This does _not_ work class Com3 extends Parent { } 

./src/components/com-3/Com3.js

 import Parent from '../parent/Parent'; // This does work class Com3 extends Parent { } 

我的问题是我没有导出文件末尾的类…

使用Babel(5.8)我得到相同的错误,如果我尝试使用expression式export default与其他export结合使用:

 export const foo = "foo" export const bar = "bar" export default function baz() {} 

我写了

 React.component 

而不是React.Component这是我的问题)),并正在寻找这个半小时以上。

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

如果您希望Browserify将React作为转换的一部分,而不是单独的文件,请确保"react": "global:React"不出现在packages.json文件的"browserify-shim"部分。

如果您在代码中使用require而不是import ,也会发生这种情况。

当我使用这个时,也发生在我身上:

 class App extends React.Component(){ } 

而不是正确的一个:

 class App extends React.Component{ } 

注意: – ()第一个是这个问题的主要原因

如果您有recursion导入,也会发生这种情况。

即ComponentA需要ComponentB,而ComponentB需要ComponentA。

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

愚蠢的是,我的问题是通过 include ()跟在类名后面使用函数符号

确保你的语法是正确的。 而且您已经导入并导出了具有正确名称和path的任何外部组件/模块。

如果您安装了新版本的反应,此模板应该可以正常工作:

 import React, { Component } from 'react' class ExampleClass extends Component { render(){ return( <div> </div> ) } } export default ExampleClass 

在我的情况下,我写

类名扩展React.Compoment //而不是类名扩展React.Component