最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Attempted import error: '.components' does not contain a default export (imported as 'App&a

programmeradmin0浏览0评论

I have the following ReactJS project structure and I'm getting the following error:

./src/index.js

Attempted import error: './components' does not contain a default export (imported as 'App').

My goal is to import components like this: import { App, Navbar } from 'components'; (notice the 'components') and not like ./components/App, ./components/App/index or so. To do that, I needed to add index.js in the components directory. I tried doing that by the following code, but I'm receiving the error above.

What's the reason? How do I solve it?

There are similar threads, but I'm already exporting it by export default App; in ./components/App/index.jsx. Maybe the reason is the .jsx extension?

  • 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();

  • components/index.js
export App from './App';
  • components/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;

  • components/App/style.css

What I tried:

I tried doing the following, like people said in this thread: Attempted import error: 'App' is not exported from './App'.

  • components/index.js
export { App } from './App'; // note the brackets

But then I got:

./src/components/index.js
Attempted import error: 'App' is not exported from './App'.

I have the following ReactJS project structure and I'm getting the following error:

./src/index.js

Attempted import error: './components' does not contain a default export (imported as 'App').

My goal is to import components like this: import { App, Navbar } from 'components'; (notice the 'components') and not like ./components/App, ./components/App/index or so. To do that, I needed to add index.js in the components directory. I tried doing that by the following code, but I'm receiving the error above.

What's the reason? How do I solve it?

There are similar threads, but I'm already exporting it by export default App; in ./components/App/index.jsx. Maybe the reason is the .jsx extension?

  • 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();

  • components/index.js
export App from './App';
  • components/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;

  • components/App/style.css

What I tried:

I tried doing the following, like people said in this thread: Attempted import error: 'App' is not exported from './App'.

  • components/index.js
export { App } from './App'; // note the brackets

But then I got:

./src/components/index.js
Attempted import error: 'App' is not exported from './App'.
Share Improve this question edited Jun 20, 2020 at 9:12 CommunityBot 11 silver badge asked Apr 14, 2020 at 21:49 nopnop 6,3319 gold badges53 silver badges161 bronze badges
Add a comment  | 

2 Answers 2

Reset to default 10

It seems you are having some confusions with ES6 export/import syntaxes. MDN documentation is very explicative, I would recommend you to check it.

The most important thing is to remember the difference between default and named export/import. (HINT: When you see brackets in export/import statements you are dealing with named ones)

In your specific case, you will have to do as follows:

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

This is the typical pattern to create a virtual export/import namespace for logical module classification.

Please note that I've not used default exports. There are several opinions about this, but I would recommend to not use them to avoid errors like the one you are having.

Please also note that you'll always have to specify the full relative path to the components directory. The only way to import things from 'components' is by having a components package installed in your node_modules directory.

Make sure you are not using the exported value componentA in {componentA}

remove `{}` and check

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论