错误:元素类型无效:需要一个字符串(对于内置组件)reactjs

Posted

技术标签:

【中文标题】错误:元素类型无效:需要一个字符串(对于内置组件)reactjs【英文标题】:Error: Element type is invalid: expected a string (for built-in components) reactjs 【发布时间】:2020-11-12 16:33:24 【问题描述】:

我收到以下错误:

错误:元素类型无效:应为字符串(对于内置 组件)或类/函数(用于复合组件),但得到: 不明确的。您可能忘记从文件中导出组件 它是在其中定义的,或者您可能混淆了默认导入和命名导入。

检查Grid的渲染方法。

我的反应代码:

import React,  useState  from "react";
import ReactDOM from "react-dom";
import ReactDataGrid from "react-data-grid";
import  Toolbar, Data  from "react-data-grid-addons";
import axios from 'axios';

const selectors = Data.Selectors;

const columns = [
   key: "MEMBER", name: "MEMBER", editable: true ,
   key: "ALIAS", name: "ALIAS", editable: true ,
   key: "STATUS", name: "STATUS", editable: true 
];

const handleFilterChange = filter => filters => 
  const newFilters =  ...filters ;
  if (filter.filterTerm) 
    newFilters[filter.column.key] = filter;
   else 
    delete newFilters[filter.column.key];
  
  return newFilters;
;

function getRows(rows, filters) 
  return selectors.getRows( rows, filters );


async function createRowData() 

  const response = await axios.get('/api/files/fileData/Allupdate.txt');  // returns an array of objects
  console.log(response)
  return response.data;



function Example( rows ) 
  console.log('rows', rows);        // I get this in console.log `rows Promise <pending>`

  const [filters, setFilters] = useState();
  const filteredRows = getRows(rows, filters);
  return (
    <ReactDataGrid
      columns=columns
      rowGetter=i => filteredRows[i]
      rowsCount=filteredRows.length
      minHeight=500
      toolbar=<Toolbar enableFilter=true />
      onAddFilter=filter => setFilters(handleFilterChange(filter))
      onClearFilters=() => setFilters()
    />
  );


const rootElement = document.getElementById("root");
ReactDOM.render(<Example rows=createRowData() />, rootElement);

【问题讨论】:

哪一行导致错误? @DrewReese 更新了屏幕截图。 这 20 个折叠的堆栈帧中有哪些详细信息? IE。调用堆栈是什么样的?这可以/应该提供一些提示,说明您的整个 Example 组件代码中有什么错误。 【参考方案1】:

我认为您的错误是因为您试图将函数呈现为组件。我的意思是 Example 不是一个组件,它是一个函数。所以当 React 尝试渲染 Example 时,他会搜索组件。

Example 是内置组件吗? -> 没有

Example 是复合组件吗? -> 没有

然后抛出错误。

试试这个:(不知道行不行)

ReactDOM.render(Example(createRowData()), rootElement);

我的意思是,尝试将函数调用到渲染中,而不是一个不存在的类。

【讨论】:

Example 是一个功能组件。我不确定您所说的“内置”或“复合”组件是什么意思。 非虚拟机。在 Google 上搜索该错误时,我看到一些人使其工作发生变化:import ReactDataGrid from "react-data-grid";const ReactDataGrid = require('react-data-grid');

以上是关于错误:元素类型无效:需要一个字符串(对于内置组件)reactjs的主要内容,如果未能解决你的问题,请参考以下文章

StylesProvider injectFirst 错误:元素类型无效:需要一个字符串(对于内置组件)或

元素类型无效:需要一个字符串(对于内置组件)或一个类/函数(对于复合组件)但得到:未定义的 React

Next Js 错误:元素类型无效:预期为字符串(对于内置组件)或类/函数(对于复合组件)但得到:未定义

React.createElement:类型无效——需要一个字符串(对于内置组件)或一个类/函数

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

为啥我会收到“元素类型无效:需要字符串(对于内置组件)或类/函数(对于复合组件)......”?