React.createElement:类型无效——需要一个字符串

新手上路,请多包涵

试图让 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() );

路线.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;

原文由 JoeTidee 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 380
2 个回答

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

常见错误:

// 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';

有几种方法可能是错误的,但该错误是因为每次都有 60% 的时间导入/导出不匹配。

编辑

通常,您 应该 获得一个堆栈跟踪,指示故障发生的大致位置。这通常紧随您在原始问题中的消息之后。

如果未显示,则可能值得调查原因(可能是您缺少的构建设置)。无论如何,如果它没有显示, 唯一 的做法是缩小导出/导入失败的范围。

可悲的是,在没有堆栈跟踪的情况下,唯一的方法是手动删除每个模块/子模块,直到不再出现错误,然后按照自己的方式备份堆栈。

编辑 2

通过评论,确实是导入问题,具体是导入了一个不存在的模块

原文由 Chris 发布,翻译遵循 CC BY-SA 4.0 许可协议

我也遇到了这个错误。

我正在使用:

import BrowserRouter from 'react-router-dom';

修复正在这样做,而不是:

import { BrowserRouter } from 'react-router-dom';

原文由 Pedro Gonçalves 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进