试图使react-router(v4.0.0)和react-hot-loader(3.0.0-beta.6)正常播放,但是在浏览器控制台中出现以下错误:
警告:React.createElement:类型无效- 预期为字符串(对于内置组件)或类/函数(对于复合组件),但得到:未定义。您可能忘记了从定义文件中导出组件。
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() );
route.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;
在大多数情况下,这是由于错误的导出/导入。
常见错误:
// 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
通过注释,这确实是一个导入问题,特别是导入一个不存在的模块