尝试得到react-router (v4.0.0)和react-hot loader (3.0.0-beta.6)很好地发挥,但在浏览器控制台得到以下错误:

Warning: React.createElement: type is invalid -- expected a string
(for built-in components) or a class/function (for composite
components) but got: undefined. You likely forgot to export your
component from the file it's defined in.

index.js:

import React from 'react';
import ReactDom from 'react-dom';
import routes from './routes.js';
require('jquery');
import 'bootstrap/dist/css/bootstrap.min.css';
import 'bootstrap/dist/js/bootstrap.min.js';
import './css/main.css';

const renderApp = (appRoutes) => {
    ReactDom.render(appRoutes, document.getElementById('root'));
};

renderApp( routes() );

routes.js:

import React from 'react';
import { AppContainer } from 'react-hot-loader';
import { Router, Route, browserHistory, IndexRoute } from 'react-router';
import store from './store/store.js';
import { Provider } from 'react-redux';
import App from './containers/App.jsx';
import Products from './containers/shop/Products.jsx';
import Basket from './containers/shop/Basket.jsx';

const routes = () => (

    <AppContainer>
        <Provider store={store}>
            <Router history={browserHistory}>
                <Route path="/" component={App}>
                    <IndexRoute component={Products} />
                    <Route path="/basket" component={Basket} />
                </Route>
            </Router>
        </Provider>
    </AppContainer>

);

export default routes;

当前回答

循环依赖也是原因之一。(一般)

其他回答

对我来说,删除Switch解决了这个问题

import React from "react";
import "./styles.css";
import { Route, BrowserRouter, Routes } from "react-router-dom";
import LoginPage from "./pages/LoginPage";
import HomePage from "./pages/HomePage";

export default function App() {
  return (
    <BrowserRouter>
      <Routes>
        <Route exact path="/" element={<HomePage />} />
        <Route path="/login" element={<LoginPage />} />
      </Routes>
    </BrowserRouter>
  );
}

当我在我的渲染/返回语句中有一个糟糕的引用时,这个问题出现在我身上。(指向不存在的类)。 还要检查return语句代码中的错误引用。

// @flow

import React from 'react';
import { styleLocal } from './styles';
import {
  View,
  Text,
  TextInput,
  Image,
} from 'react-native';
import { TouchableOpacity } from 'react-native-gesture-handler';

export default React.forwardRef((props, ref) => {
const { onSeachClick, onChangeTextSearch , ...otherProps } = props;

  return (
        <View style={styleLocal.sectionStyle}>
        <TouchableOpacity onPress={onSeachClick}>
            <Image                              
                    source={require('../../assets/imgs/search.png')}
                    style={styleLocal.imageStyle} />
                </TouchableOpacity>
            <TextInput
                style={{ flex: 1, fontSize: 18 }}
                placeholder="Search Here"
                underlineColorAndroid="transparent"
                onChangeText={(text) => { onChangeTextSearch(text) }}
            />
        </View>
  );
});
 import IGPSSearch from '../../components/IGPSSearch';
<Search onSeachClick={onSeachClick} onChangeTextSearch= {onChangeTextSearch}> </Search>

当我将css文件添加到与组件文件相同的文件夹时,我遇到了这个问题。

我的重要陈述是:

import MyComponent from '../MyComponent'

当只有一个文件MyComponent.jsx时,这很好。(我在一个例子中看到了这种格式,并尝试了一下,然后忘记了我已经做到了)

当我添加MyComponent时。将SCSS导入到同一文件夹,则导入失败。也许JavaScript反而加载了.scss文件,所以没有出现错误。

我的结论是:即使只有一个文件,也要指定文件扩展名,以防稍后添加另一个文件。

我认为在排除这个错误时最重要的一点是,当您试图实例化一个不存在的组件时,它就会显现出来。这个组件不需要导入。在我的例子中,我将组件作为属性传递。我忘记更新其中一个调用,以便在一些重构之后正确地传递组件。不幸的是,由于JS不是静态类型的,我的错误没有被发现,它花了一些时间来弄清楚发生了什么。

要排除此错误,在呈现组件之前检查该组件,以确保它是您所期望的组件类型。