javascript - 尝试导入错误:“./components”不包含默认导出(导入为“应用程序”)
问题描述
我有以下 ReactJS 项目结构,我收到以下错误:
./src/index.js
尝试导入错误:“./components”不包含默认导出(导入为“应用程序”)。
我的目标是导入这样的组件:(import { App, Navbar } from 'components';
注意“组件”)而不是 like ./components/App
,./components/App/index
或者这样。为此,我需要在 components 目录中添加 index.js。我尝试通过以下代码执行此操作,但我收到了上面的错误。
什么原因?我该如何解决?
有类似的线程,但我已经export default App;
在 ./components/App/index.jsx 中导出它。也许原因是 .jsx 扩展名?
- index.js
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './components';
import * as serviceWorker from './serviceWorker';
ReactDOM.render(<App />, document.getElementById('root'));
serviceWorker.unregister();
- 组件/index.js
export App from './App';
- 组件/应用程序/index.jsx
import React, { Fragment } from 'react';
import './style.css';
import { BrowserRouter as Router, Switch, Route, Redirect } from 'react-router-dom';
import NotAuthorizedRoute from '../../common/NotAuthorizedRoute';
import { Navbar, Home, User, Login } from 'components';
const App = () => {
return (
<Fragment>
<Router>
<Navbar />
<Switch>
<Route exact path="/" component={Home} />
<Route path="/users" component={User} />
<NotAuthorizedRoute path="/sign-in" component={Login} />
<Redirect from="*" to="/" />
</Switch>
</Router>
</Fragment>
);
};
export default App;
- 组件/应用程序/style.css
我尝试了什么:
我尝试执行以下操作,就像人们在此线程中所说的那样:尝试导入错误:'App' is not export from './App'。
- 组件/index.js
export { App } from './App'; // note the brackets
但后来我得到:
./src/components/index.js
Attempted import error: 'App' is not exported from './App'.
解决方案
您似乎对 ES6导出/导入语法有些困惑。MDN 文档非常详细,我建议您查看它。
最重要的是记住默认和命名导出/导入之间的区别。(提示:当您在导出/导入语句中看到括号时,您正在处理命名的语句)
在您的具体情况下,您必须执行以下操作:
- ./components/component-a.jsx
const ComponentA = () => {
return (
<MyComponent/>
);
};
export {ComponentA};
- ./components/component-b.jsx
const ComponentB = () => {
return (
<MyComponent/>
);
};
export {ComponentB};
- ./components/index.js
import {componentA} from './component-a.jsx';
import {componentB} from './component-b.jsx';
export {componentA, componentB};
- ./some-file.jsx
import {componentA, componentB} from './components';
- ./some-other-file.jsx
import {componentA} from './components';
这是为逻辑模块分类创建虚拟导出/导入命名空间的典型模式。
请注意,我没有使用默认导出。对此有几种意见,但我建议不要使用它们以避免像您遇到的错误一样。
另请注意,您始终必须指定components
目录的完整相对路径。从中导入内容的唯一方法是在您的目录中安装'components'
一个components
包。node_modules
推荐阅读
- rust - `vec![0,1024]` 宏有问题。为什么`1024`需要是`u8`?
- javascript - 嵌套菜单没有正确响应
- http - 八度发布 - HTTP
- python - Pandas Dataframe: Can I fetch other column values along with the column on which group by clause has been applied?
- python - 网页抓取结果为无
- r - 有没有一种简单的方法可以使用 r 中的循环来简化此代码?
- r - 在 R 中转换为几列的日期?
- sql - 按天显示从访问到购买商品 A 的唯一转化率
- sql - 在 TSQL 中选择具有特殊字符的列?
- sql-server - 使用 localhost\SQLEXPRESS 连接到 SQL 有效,但 local_ip\SQLEXPRESS 无效