React.createElement: type is invalid -- expected a string React.createElement: 类型无效 - 期望为字符串
React.createElement: type is invalid -- expected a string React.createElement: 类型无效 - 期望为字符串
尝试让react-router(v4.0.0)和react-hot-loader(3.0.0-beta.6)兼容,但在浏览器控制台中出现以下错误:\n警告:React.createElement:类型无效 - 预期为字符串(用于内置组件)或类/函数(用于复合组件),但得到的是:undefined。你可能忘记从定义组件的文件中导出你的组件。
\nindex.js:\n
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());
\nroutes.js:\n
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 = () => (); export default routes;
问题的出现的原因是在使用React Router时,没有正确导入所需的模块。解决方法是在App.js文件中正确导入BrowserRouter和Route模块。
具体的解决方法如下:
首先,在命令行中运行以下命令安装react-router-dom模块:
npm i react-router-dom
然后,在App.js文件中导入所需的模块,并定义Home组件和App组件:
import { BrowserRouter as Router, Route } from 'react-router-dom'; const Home = () =>Home
; const App = () => (); export default App;
这样就可以正确地使用React Router,并将props发送/接收到Home组件中了。
在使用React时,有时会遇到"React.createElement: type is invalid -- expected a string"的错误。这个错误通常是由于导入模块的方式不正确导致的。
具体问题可能出现在使用React Router库时。在上述情况中,错误的导入方式是使用了错误的语法。正确的导入方式是使用解构赋值的方式将BrowserRouter或AppLoading导入,而不是直接导入整个模块。
出现这个错误的原因是React Router和Expo两个库的导入方式不同。在React Router中,需要通过解构赋值的方式将BrowserRouter导入;而在Expo中,需要直接导入AppLoading。
因此,解决这个问题的方法就是根据具体的库,采用正确的导入方式。在上述例子中,将导入语句修改为import { BrowserRouter } from 'react-router-dom';和import AppLoading from 'expo-app-loading';即可解决问题。
通过以上的修改,我们可以避免"React.createElement: type is invalid -- expected a string"的错误,并正常使用React库中的相关功能。
React.createElement: type is invalid -- expected a string 这个问题的出现原因是由于错误的导入/导出。
通常情况下,错误的导入/导出是导致这个问题的原因之一。以下是一个常见的错误示例:
// 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%的可能是由于导入/导出不匹配造成的。
通常情况下,你会得到一个堆栈跟踪,指示失败发生的大致位置。这通常在你原始问题中的消息之后显示。
如果没有显示,可能需要调查为什么(可能是你缺少的构建设置)。无论如何,如果没有显示,唯一的解决方法是缩小导出/导入失败的位置。
可惜的是,如果没有堆栈跟踪,唯一的方法是手动删除每个模块/子模块,直到不再出现错误,然后逐步恢复堆栈。
根据评论,的确是一个导入问题,具体是导入了一个不存在的模块。
根据跟踪,指向了routes.js的第12行。该行是`
你确定index route实际上是RR4的一部分吗?(我很确定它不是)
问题就出在这里 - 谢谢!我已经恢复到v3.0.0。
很好,很棒。如果这个答案对其他读者有帮助,请标记它为接受的答案,这将帮助其他读者知道如何处理类似的问题。
如果你想继续使用RR4,请按照这个指南操作。我现在也在同一艘船上... github.com/ReactTraining/react-router/blob/master/packages/...
我遇到了`import { Select } from 'react-select';`的问题,并将其改为`import Select from 'react-select';`。
"warning"和"error"是不同的。我遇到了这个警告,导入文件路径是正确的。
仅凭一个小小的评论是无法判断的。你能否发布一个带有详细信息的新问题?
无论是HOC还是其他什么,都不应该有影响。你可以提一个新问题或提供更多信息吗?
在我的情况下,问题是`import { FooBar }`而不是`import { Foobar }`。
查看上面Chris的"Edit 2"。只需确保导入的模块不是空的。这就是我的问题,添加一些内容后问题解决了。
对我来说也是一个导入问题,但一开始看起来并不像,最终追查到了愚蠢的导入错误。
也有可能是`react-redux`被模拟或覆盖了。如果你有一个`__mocks__/react-redux.ts`文件,删除它可能会有所帮助。
对于我来说,问题是导入了一个"default export"的括号。太高兴问题如此简单...感谢帮助!<3
我遇到了相同的错误,并通过将`import { ThumbUpAltIcon } from "-ui/icons/ThumbUpAlt";`改为`import ThumbUpAltIcon from "-ui/icons/ThumbUpAlt";`来解决。