尝试得到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;

当前回答

在我的例子中,创建组件和渲染的顺序很重要。我在创建组件之前渲染了它。最好的方法是创建子组件,然后是父组件,然后呈现父组件。改变顺序为我解决了这个问题。

其他回答

这意味着您的导入/导出不正确。

检查新增的导入/导出。 在我的例子中,我不必要地使用了大括号。当我去掉这些花括号时,问题就自动解决了。

import { OverlayTrigger } from 'react-bootstrap/OverlayTrigger';

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

我的重要陈述是:

import MyComponent from '../MyComponent'

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

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

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

当我将nothingundefined作为值传递给我创建的子组件时,发生了这个问题。我做了这个<MyComponent src="" />导致错误。然后将其更改为<MyComponent src=" " />,因为我真的不想传递任何东西…问题解决了。

在我的情况下,我忘记导入和导出我的(新)元素在index.js文件的渲染调用。

您需要了解命名导出和默认导出。我什么时候应该用大括号导入ES6 ?

在我的例子中,我通过改变

import Provider from 'react-redux'

to

import { Provider } from 'react-redux'