React 0.14.2 error - Super expression必须为null或函数

时间:2015-11-13 18:35:16

标签: javascript reactjs ecmascript-6 webpack babeljs

从0.13.2更新到0.14.2后,我收到此错误:

Uncaught TypeError: Super expression must either be null or a function, not object

已经有several questions。 最常见的错误是拼写错误的React.component(没有大写字母C)。 另一个是尝试使用版本<的ES6类。 0.13。

但是我已经成功地使用了React 0.13.x的ES6类,并且我到处都使用大写C,并且记录React.Component似乎给出了一个合适的结果(函数ReactComponent(...))

经过一番搜索,我做了这3个测试用例,其中2个抛出了相同的错误(没有我理解为什么)而一个没有。看似建议类出现的顺序是个问题吗?

TEST 1 (抛出错误)

//Test.jsx
var React = require('react');
var ReactDOM = require('react-dom');
var BaseComponent = require('./BaseComponent');

class Test extends BaseComponent {
    render() { return <div>Test worked</div>; }
}
ReactDOM.render(<Test />, document.getElementById('test'));

//BaseComponent.jsx
var React = require('react');
console.log(React.Component); // <--- logs "function ReactComponent(...)" !!
export default class BaseComponent extends React.Component { }

TEST 2 (将BaseComponent置于Test.jsx下,仍然出错)

//Test.jsx
var React = require('react');
var ReactDOM = require('react-dom');
class Test extends BaseComponent { render() { return <div>Test worked</div>;     } }
class BaseComponent extends React.Component { }
ReactDOM.render(<Test />, document.getElementById('test'));

TEST 3 (将BaseComponent置于Test类定义之上,没有错误!?)

//Test.jsx
var React = require('react');
var ReactDOM = require('react-dom');
class BaseComponent extends React.Component { }
class Test extends BaseComponent { render() { return <div>Test worked</div>;     } }
ReactDOM.render(<Test />, document.getElementById('test'));

我甚至不确定这会解决我的实际问题。但了解这些测试案例中发生的事情可能有助于我找到解决方案。

我正在使用带有babel的webpack编译成一个包。

更新 改变

export default class BaseComponent extends React.Component { }

class BaseComponent extends React.Component { }
module.exports = BaseComponent;

也删除了错误! 这意味着我现在要重构,但它没有解决问题,因为export default class应该正常工作

2 个答案:

答案 0 :(得分:5)

我找到了解决方案。这是因为巴贝尔的变化,我也更新了。 如果您使用:

export default class BaseComponent

您还需要使用import代替require,所以:

import BaseComponent from './BaseComponent'

而不是

var BaseComponent = require('./BaseComponent')

使用此正则表达式替换它到处: 替换:var ([\w-_]+?) = require\('([\w-_.\/]+?)'\); 用:import $1 from '$2';

答案 1 :(得分:0)

前一段时间我遇到过类似的问题,删除了node_modules文件夹并重新安装了一切对我有用的东西,也许你可以尝试一下?