尝试得到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 React from //注意末尾的.css,这是错误的原因! import SeeminglyUnimportantComponent from './SeeminglyUnimportantComponent.css'; Const组件= (props) => ( < div > < SeeminglyUnimportantComponent / > {/ *……这里的组件代码*/} < / div > ); 导出默认组件;

其他回答

如果在测试组件时出现此错误,请确保每个子组件在单独运行时都能正确呈现,如果其中一个子组件依赖于外部资源来呈现,请尝试使用jest或任何其他mock库来模拟它:

示例:

jest.mock('pathToChildComponent', () => 'mock-child-component')

大多数情况下,这表示导入/导出错误。但是要注意,不仅要确保堆栈跟踪中引用的文件本身得到了良好的导出,还要确保该文件正确地导入了其他组件。在我的例子中,错误是这样的:

import React from //注意末尾的.css,这是错误的原因! import SeeminglyUnimportantComponent from './SeeminglyUnimportantComponent.css'; Const组件= (props) => ( < div > < SeeminglyUnimportantComponent / > {/ *……这里的组件代码*/} < / div > ); 导出默认组件;

这真的很简单。当我开始编写React时,我遇到了这个问题,这个问题几乎总是因为导入:

import React, { memo } from 'react';

你可以对它进行解构,因为react lib有一个memo属性,但你不能这样解构

import { user } from 'assets/images/icons/Profile.svg';

因为它不是一个对象。

希望能有所帮助!

我刚刚花了30分钟来解决这个基本的问题。

我的问题是我导入react原生元素

例如导入React,{文本,图像,组件}从' React ';

并试图使用它们,这导致我收到这个错误。

一旦我从<文本>切换到<p>和<图像>到<img>,一切都按预期工作。

在我的例子中,在使用Jest时,我模拟了一些模块,它导致了错误,因为模拟的模块不包括在其他领域使用的某些组件。

因此,请检查您的测试组件中是否有一些模拟函数。