Javascript React.createElement类型无效[与其他类似帖子不同的错误]

Javascript React.createElement类型无效[与其他类似帖子不同的错误],javascript,reactjs,svg,webpack,react-dom,Javascript,Reactjs,Svg,Webpack,React Dom,我的困境是:一切都正确编译,django服务器运行良好;但是,开发人员工具显示了相同的错误注意:在stack overflow和github上还有其他类似的帖子;然而,我已经通读了所有这些,并尝试了每一个建议的答案,但都没有用以下是我的错误截图: 我的项目是react/django项目,因此我目前有一个名为“DataGetching.js”的文件,它从api中提取信息,我试图通过在App.js中调用此组件在屏幕上显示该api。随着我作为一名开发人员的成长,我在App.js中实现了一个导航栏,以

我的困境是:一切都正确编译,django服务器运行良好;但是,开发人员工具显示了相同的错误注意:在stack overflow和github上还有其他类似的帖子;然而,我已经通读了所有这些,并尝试了每一个建议的答案,但都没有用以下是我的错误截图:

我的项目是react/django项目,因此我目前有一个名为“DataGetching.js”的文件,它从api中提取信息,我试图通过在App.js中调用此组件在屏幕上显示该api。随着我作为一名开发人员的成长,我在App.js中实现了一个导航栏,以尝试了解api和react组件之间的交互。以下是我的App.js、webpack、index.js、index.html、DataFetching.js、我的文件结构和package.json

文件结构:

App.js:

import './index.css';
import { ReactComponent as BellIcon } from './icons/bell.svg';
import { ReactComponent as MessengerIcon } from './icons/messenger.svg';
import { ReactComponent as CaretIcon } from './icons/caret.svg';
import { ReactComponent as PlusIcon } from './icons/plus.svg';
import { ReactComponent as CogIcon } from './icons/cog.svg';
import { ReactComponent as ChevronIcon } from './icons/chevron.svg';
import { ReactComponent as ArrowIcon } from './icons/arrow.svg';
import { ReactComponent as BoltIcon } from './icons/bolt.svg';
import DataFetching from "../DataFetching";
import React, { useState, useEffect, useRef} from 'react';
import { CSSTransition } from 'react-transition-group';



function App() {
  return (
    <div className="App">
      <DataFetching />
      <Navbar>
        <NavItem icon={<PlusIcon />} />
        <NavItem icon={<BellIcon />} />
        <NavItem icon={<MessengerIcon />} />
        <NavItem icon={<CaretIcon />}>
          <DropdownMenu></DropdownMenu>
        </NavItem>
      </Navbar>
    </div>
  );
}


function Navbar(props) {
  return (
    <nav className="navbar">
      <ul className="navbar-nav">{props.children}</ul>
    </nav>
  );
}

function NavItem(props) {
  const [open, setOpen] = useState(false);

  return (
    <li className="nav-item">
      <a href="#" className="icon-button" onClick={() => setOpen(!open)}>
        {props.icon}
      </a>

      {open && props.children}
    </li>
  );
}

function DropdownMenu() {
  const [activeMenu, setActiveMenu] = useState('main');
  const [menuHeight, setMenuHeight] = useState(null);
  const dropdownRef = useRef(null);

  useEffect(() => {
    setMenuHeight(dropdownRef.current?.firstChild.offsetHeight)
  }, [])

  function calcHeight(el) {
    const height = el.offsetHeight;
    setMenuHeight(height);
  }

  function DropdownItem(props) {
    return (
      <a href="#" className="menu-item" onClick={() => props.goToMenu && setActiveMenu(props.goToMenu)}>
        <span className="icon-button">{props.leftIcon}</span>
        {props.children}
        <span className="icon-right">{props.rightIcon}</span>
      </a>
    );
  }

  return (
    <div className="dropdown" style={{ height: menuHeight }} ref={dropdownRef}>

      <CSSTransition
        in={activeMenu === 'main'}
        timeout={500}
        classNames="menu-primary"
        unmountOnExit
        onEnter={calcHeight}>
        <div className="menu">
          <DropdownItem>My Profile</DropdownItem>
          <DropdownItem
            leftIcon={<CogIcon />}
            rightIcon={<ChevronIcon />}
            goToMenu="settings">
            Settings
          </DropdownItem>
          <DropdownItem
            leftIcon="There are a few things that need to be changed. Changed the import line for each svg to
import BellIcon from './icons/bell.svg';

Then, in the webpack, change to:

module.exports = {
    module: {
      rules: [
        {
          test: /\.js$/,
          exclude: /node_modules/,
          use: {
            loader: "babel-loader"
          }
        },
        {
          test: /\.css$/i,
          use: ["style-loader", "css-loader"],
        },
        {
          test: /\.svg$/,
          use: [
            {
              loader: 'file-loader',
              options: {
              // name: 'images/[hash]-[name].[ext]',
              },
            },
          ],
        },
      ]
    }
  };
import./index.css';
从“./icons/bell.svg”导入{ReactComponent as BellIcon};
从“./icons/messenger.svg”导入{ReactComponent as messenger Icon};
从“./icons/caret.svg”导入{ReactComponent as CaretIcon};
从“./icons/plus.svg”导入{ReactComponent as PlusIcon};
从“./icons/cog.svg”导入{ReactComponent as CogIcon};
从“./icons/chevron.svg”导入{ReactComponent as ChevronIcon};
从“./icons/arrow.svg”导入{ReactComponent as ArrowIcon};
从“./icons/bolt.svg”导入{ReactComponent as BoltIcon};
从“./DataFetching”导入数据获取;
从“React”导入React,{useState,useffect,useRef};
从'react transition group'导入{CSTranslation};
函数App(){
返回(
);
}
功能导航栏(道具){
返回(
    {props.children}
); } 功能导航项目(道具){ const[open,setOpen]=useState(false); 返回(
  • {open&&props.children}
  • ); } 函数下拉菜单(){ const[activeMenu,setActiveMenu]=useState('main'); const[menuHeight,setMenuHeight]=useState(null); const dropdownRef=useRef(null); useffect(()=>{ 设置菜单高度(dropdownRef.current?.firstChild.offsetHeight) }, []) 函数calcHeight(el){ 常数高度=标高离视线; 设定高度(高度); } 功能下拉项(道具){ 返回( ); } 返回( 我的个人资料 设置
    有几件事需要更改。将每个svg的导入行更改为
    从“/icons/bell.svg”导入BellIcon;

    然后,在网页中,更改为:

    在package.json中,需要添加
    “引导图标”:“^1.4.1”,

    最后,在.babelrc中添加一个插件:


    “插件”:[“内联svg”]

    尝试使用create react应用程序项目生成代码,但无法再现错误。错误可能与您的依赖项有关,它们是不同的。通过逐个删除应用程序渲染中的元素来查找问题,直到错误消失。@MichaelRovinsky感谢您的建议。我已将其缩小到我的NavItems,这仍然让我非常困惑,但现在错误已经缩小,我将创建一个新的帖子。