未捕获的错误:不断违反:元素类型无效:预期为字符串(对于内置组件)或类/函数,但得到了:对象

reactjs React.js

斯丁AJinJin

2020-03-09

我收到此错误:

未捕获的错误:始终违反:元素类型无效:预期为字符串(对于内置组件)或类/函数(对于复合组件),但得到了:对象。

这是我的代码:

var React = require('react')
var ReactDOM =  require('react-dom')
var Router = require('react-router')
var Route = Router.Route
var Link = Router.Link

var App = React.createClass({
  render() {
    return (
      <div>
        <h1>App</h1>
        <ul>
          <li><Link to="/about">About</Link></li>
        </ul>
      </div>
    )
  }
})

var About = require('./components/Home')
ReactDOM.render((
  <Router>
    <Route path="/" component={App}>
      <Route path="about" component={About} />
    </Route>
  </Router>
), document.body)

我的Home.jsx档案:

var React = require('react');
var RaisedButton = require('material-ui/lib/raised-button');

var Home = React.createClass({
  render:function() {
    return (
        <RaisedButton label="Default" />
    );
  },
});

module.exports = Home;

第350篇《未捕获的错误:不断违反:元素类型无效:预期为字符串(对于内置组件)或类/函数,但得到了:对象》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

13个回答
神无LEY 2020.03.09

我发现了此错误的另一个原因。它与CSS-in-JS返回一个空值到React组件中的return函数的顶级JSX有关。

例如:

const Css = styled.div`
<whatever css>
`;
export function exampleFunction(args1) {
  ...
  return null;
}

export default class ExampleComponent extends Component {
...
render() {
const CssInJs = exampleFunction(args1);
  ...
  return (
    <CssInJs>
      <OtherCssInJs />
      ...
    </CssInJs>
  );
}

我会收到以下警告:

警告:React.createElement:类型无效-预期为字符串(对于内置组件)或类/函数(对于复合组件),但得到:null。

随后出现此错误:

未捕获的错误:元素类型无效:预期为字符串(对于内置组件)或类/函数(对于复合组件),但得到:null。

我发现这是因为我没有尝试渲染带有CSS-in-JS组件的CSS。我通过确保返回了CSS而不是null值来解决了这个问题。

例如:

const Css = styled.div`
<whatever css>
`;
export function exampleFunction(args1) {
  ...
  return Css;
}

export default class ExampleComponent extends Component {
...
render() {
const CssInJs = exampleFunction(args1);
  ...
  return (
    <CssInJs>
      <OtherCssInJs />
      ...
    </CssInJs>
  );
}
null 2020.03.09

我有同样的问题,问题是该特定页面的捆绑中未包含一些js文件。尝试包括那些文件,问题可能已解决。我这样做:

.Include("~/js/" + jsFolder + "/yourjsfile")

它为我解决了这个问题。

这是我在Dot NEt MVC中使用React的时候

TomNear前端 2020.03.09

我有一个问题React.Fragment,因为我的react版本是< 16.2,所以我摆脱了它。

阳光Mandy 2020.03.09

除了import/ export提到的问题。我发现使用React.cloneElement()添加props到子元素然后渲染它给了我同样的错误。

我不得不改变:

render() {
  const ChildWithProps = React.cloneElement(
    this.props.children,
    { className: `${PREFIX}-anchor` }
  );

  return (
    <div>
      <ChildWithProps />
      ...
    </div>
  );
}

至:

render() {
  ...
  return (
    <div>
      <ChildWithProps.type {...ChildWithProps.props} />
    </div>
  );
}

有关更多信息,请参阅React.cloneElement() 文档

Jim米亚西里 2020.03.09

对我来说,我的样式化组件是在功能组件定义之后定义的。这只是在舞台上发生,而不是在我本地发生。将样式化的组件移到组件定义上方之后,错误消失了。

前端猴子 2020.03.09

我在响应路由中遇到此错误,问题是我正在使用

<Route path="/" component={<Home/>} exact />

但是这是错误的路线,要求组件作为类/函数,所以我将其更改为

<Route path="/" component={Home} exact />

而且有效。(仅避免在组件周围放括号)

伽罗卡卡西 2020.03.09

就我而言,我使用的是默认导出,但不导出functionReact.Component,而仅导出一个JSX元素,即

错误:

export default (<div>Hello World!</div>)

作品:

export default () => (<div>Hello World!</div>)
老丝猪猪小卤蛋 2020.03.09

当我在同一目录中具有相同根名称的.jsx和.scss文件时,遇到了此错误。

因此,举例来说,如果你有Component.jsxComponent.scss在同一个文件夹,你尝试这样做:

import Component from ./Component

Webpack显然很混乱,至少在我的情况下,当我真的想要.jsx文件时,尝试导入scss文件。

我能够通过重命名.scss文件并避免歧义来修复它。我也可以显式导入Component.jsx

理查德小哥 2020.03.09

在我的情况下,导入是由于库而隐式发生的。

我设法通过更改来解决

export class Foo

export default class Foo

小小 2020.03.09

另一个可能的解决方案,对我有用:

当前,react-router-redux处于beta中,npm返回4.x,但不返回5.x。但是@types/react-router-redux返回了5.x。因此,使用了未定义的变量。

强制NPM / Yarn使用5.x为我解决了该问题。

逆天梅 2020.03.09

就我而言,这是由错误的注释符号引起的。这是错误的:

<Tag>
    /*{ oldComponent }*/
    { newComponent }
</Tag>

这是对的:

<Tag>
    {/*{ oldComponent }*/}
    { newComponent }
</Tag>

注意大括号

TomGO梅 2020.03.09

就我而言,导出的子模块之一未返回适当的react组件。

const Component = <div> Content </div>;

代替

const Component = () => <div>Content</div>;

显示的错误是针对父级的,因此无法确定。

Near卡卡西 2020.03.09

您是否刚刚对任何React组件进行了模块化?如果是,则如果忘记指定module.exports则会出现此错误,例如:

非模块化先前有效的组件/代码:

var YourReactComponent = React.createClass({
    render: function() { ...

带有module.exports的模块化组件/代码

module.exports = React.createClass({
    render: function() { ...

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android