当前位置: 首页 > 知识库问答 >
问题:

React 0.14.2错误-超级表达式必须为null或函数

易昌翰
2023-03-14

从0.13.2更新到0.14.2后,我发现以下错误:

未捕获类型错误:超级表达式必须为null或函数,而不是对象

对此已经有几个问题了。最常见的错误是拼错React.component(没有大写字母C)。另一个是尝试使用ES6类的版本

但我已经成功地使用了带有React 0.13.x的ES6类,我在所有地方都使用大写字母C,并且记录React.Component似乎给出了一个合适的结果(函数ReactComponent(…)

经过一些搜索,我做了这3个测试用例,其中2个抛出了相同的错误(我不知道为什么),一个没有。似乎暗示类出现的顺序是一个问题?

测试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 { }

测试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'));

测试3(将BaseComponent置于测试类定义之上,没有错误!)

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

还删除了错误!这意味着我现在要重构它,但它不能解决问题,因为导出默认类应该可以正常工作

共有2个答案

澹台宾白
2023-03-14

不久前我遇到了一个类似的问题,删除node_modules文件夹并重新安装所有对我有用的东西,也许你可以试试?

严正诚
2023-03-14

我找到了解决办法。这是因为巴别塔的变化,我也更新了。如果您使用:

export default class BaseComponent

您还需要使用导入而不是要求,因此:

import BaseComponent from './BaseComponent'

而不是

var BaseComponent = require('./BaseComponent')

使用这个正则表达式来替换它:替换:var([\w-_]?)=需要\('([\w-_。\/] ?)'\);与:导入1美元从'2美元';

 类似资料:
  • 问题内容: 我使用React编写此演示。我使用Webpack来构建此演示。启动此演示时,错误将显示给我。 错误: 未捕获的TypeError:超级表达式必须为null或函数,且未定义 我不知道该怎么解决。 问题答案: 代码中的唯一警告是由于您没有扩展正确的类,而需要扩展。

  • 问题内容: 我是React Router的新手(https://github.com/rackt/react- router )。我这样反应后包括了它: 我收到一个错误:未捕获的TypeError:超级表达式必须为null或函数,且未定义 我做错什么了? 问题答案: 我通过将react版本升级到0.13.3解决了这个问题

  • 问题内容: 我正在使用reactjs。 当我在浏览器下面运行代码时: 未捕获的TypeError:超级表达式必须为null或函数,且未定义 关于任何错误的任何暗示将不胜感激。 首先是用于编译代码的行: 和代码: 更新:在针对此问题的地狱之火中燃烧了三天后,我发现我没有使用最新版本的react。 全局安装: 在本地安装: 确保浏览器也使用正确的版本: 希望这可以为他人节省三天的宝贵生命。 问题答案:

  • 我一直在学习udemy的课程,但无论我做什么,都会出现一个错误: 以下是组件代码: 下面是我要导入的图表组件: 但显然是反应。组件未定义,所以它会抛出一个错误。

  • 我正在尝试使用Vue 3和TypeScript创建一个新项目。为此,我想使用vue-Property-装饰器,因为我喜欢装饰器的类语法。 我使用Vue CLI创建了一个新的Vue 3 TypeScript项目。 现在,如果我尝试向Vue组件添加vue-Property-装饰器导入,我会在浏览器控制台中收到错误“Super表达式必须为空或为函数”。我的组件如下所示: 该脚本只是粘贴到我的应用程序中的

  • 我试着检查了其他帖子,上面写着看到了同样的错误信息,但是没有一个符合我的上下文。我是新来的ReactJS,我正在我自己的项目。所以,我创建了两个文件index.html和js/index.js。 “index.html”文件包含以下代码: “js/index.js”文件包含: 我不知道这个代码有什么问题,我得到了错误。