从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
应该正常工作
答案 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文件夹并重新安装了一切对我有用的东西,也许你可以尝试一下?