元素:类型无效错误

IT技术 reactjs
2021-05-15 09:05:11

我正在尝试从另一个组件调用一个组件。但是,我收到了这两个错误:

页面上的 2 个错误中的 1 个
:类型无效——需要一个字符串(对于内置组件)或一个类/函数(对于复合组件)但得到:对象。您可能忘记从它定义的文件中导出您的组件。在 displayRevenue.js 检查您的代码

页面上的 2 个错误中的 2 个
元素类型无效:应为字符串(对于内置组件)或类/函数(对于复合组件)但得到:对象。您可能忘记从它定义的文件中导出您的组件。检查的渲染方法DisplayRevenue

Parent ComponentDisplayRevenue如下:

import React, { Component } from 'react';
import '../App.css';
import ListData from './listdata.js'
var axios = require('axios');

class DisplayRevenue extends Component {

  constructor(props){
    super(props);
    this.state = { data:[] }
  }
  componentWillMount() {
   this.loadRevenue(this.props.url, this.props.token);
 }

  setData(data){
    this.setState(data:data);
    console.log(this.state.data);    //this gives output as json object
  }

  loadRevenue(url,token){
    axios({
      method:'get',
      url:url,
      headers: {
        Authorization: `Bearer ${token}`,
      },
    })
     .then( (response) => {
    //   console.log(response.data);
       this.setData(response.data);
     })
     .catch(function (error) {
       console.log("Error in loading Revenue "+error);
     });
  }

  render() {
  var ListData = this.state.data.map( (invoice) => {return <div>{invoice.customerNumber}</div>})
    return (
      <ListData />
    );
  }
};

export default DisplayRevenue;          

Child ComponentListData如下:

import React, { Component } from 'react';
import '../App.css';

class ListData extends Component {

  render() {
    return (
      <div>
        {"HI"}
      </div>
    );
  }
  //{this.props.data.map( (invoice) => <div>{invoice.customerNumber}</div>)}
}

export default ListData;         
  • 这两个组件都在同一个文件夹中,即“组件”
  • 是什么导致了这个错误?

注意:我知道之前有人问过有关此问题的问题,但没有一个能解决我的错误。

1个回答

正如@Felix Kling 所说,覆盖代码中的组件存在问题试试这个:

import React, { Component } from 'react';
import '../App.css';
//import ListData from './listdata.js'
var axios = require('axios');

class DisplayRevenue extends Component {

  constructor(props){
    super(props);
    this.state = { data:[] }
  }
  componentWillMount() {
   this.loadRevenue(this.props.url, this.props.token);
 }

  setData(data){
    this.setState(data:data);
    console.log(this.state.data);    //this gives output as json object
  }

  loadRevenue(url,token){
    axios({
      method:'get',
      url:url,
      headers: {
        Authorization: `Bearer ${token}`,
      },
    })
     .then( (response) => {
    //   console.log(response.data);
       this.setData(response.data);
     })
     .catch(function (error) {
       console.log("Error in loading Revenue "+error);
     });
  }

  render() {
  //var ListData = this.state.data.map( (invoice) => {return <div>{invoice.customerNumber}</div>})
    return (
      <ListData data={this.state.data}/>
    );
  }
};

export default DisplayRevenue;

class ListData extends Component {

  render() {
    return (
      <div>
        {this.props.data.map( (invoice) => <div>{invoice.customerNumber} </div>)}
      </div>
    );
  }
}