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

当前回答

简而言之,不知何故发生了以下情况:

render() {
    return (
        <MyComponent /> // MyComponent is undefined.
    );
}

它不一定与某些不正确的输入或输出有关:

render() {
    // MyComponent may be undefined here, for example.
    const MyComponent = this.wizards[this.currentStep];

    return (
        <MyComponent />
    );
}

其他回答

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

大多数情况下,这是由于不正确的导出/导入。

常见错误:

// File: LeComponent.js
export class LeComponent extends React.Component { ... }

// File: App.js
import LeComponent from './LeComponent';

可能的选项:

// File: LeComponent.js 
export default class LeComponent extends React.Component { ... }

// File: App.js
import LeComponent from './LeComponent';

有几种方法可能是错误的,但这种错误是由于导入/导出不匹配造成的,每次都是如此。

Edit

通常情况下,您应该得到一个堆栈跟踪,它指示故障发生的大致位置。这通常跟在你最初问题的信息之后。

如果没有显示,可能需要调查原因(可能是您遗漏了一个构建设置)。无论如何,如果它没有显示,唯一的操作方法是缩小导出/导入失败的地方。

遗憾的是,在没有stacktrace的情况下,唯一的方法是手动删除每个模块/子模块,直到您不再得到错误,然后再从堆栈中返回。

编辑2

通过注释,这确实是一个导入问题,特别是导入一个不存在的模块

简而言之,不知何故发生了以下情况:

render() {
    return (
        <MyComponent /> // MyComponent is undefined.
    );
}

它不一定与某些不正确的输入或输出有关:

render() {
    // MyComponent may be undefined here, for example.
    const MyComponent = this.wizards[this.currentStep];

    return (
        <MyComponent />
    );
}

我的情况不像上面许多人说的那样是一个重要的问题。在我的版本中,我们使用了一个包装器组件来做一些转换逻辑,我错误地传递了子组件,就像这样:

const WrappedComponent = I18nWrapper(<ChildForm {...additionalProps} />);

当我应该把它作为一个函数传递的时候:

const WrappedComponent = I18nWrapper(() => <ChildForm {...additionalProps} />);

这并不是一个与进出口直接相关的问题。在我的例子中,我是在父元素中呈现子元素,并且子元素有jsx element / tag,它被使用但没有导入。我导入并使用它,然后它解决了这个问题。所以问题是在jsx元素里面的子元素,而不是导出子元素本身。