admin管理员组文章数量:1193337
I have a trivial problem. Having this file structure, I'd like to expose all components (in index.js) so they are reachable in App.js, like that: import { Header, Menu } from "../components";
. But I'm getting error that neither Home
nor Menu
are in the components. Here is the structure:
src/
index.js
app/
App.js
createStore.js
reducers.js
components/
index.js <--------------- In here, I'd like to export all components
button/
Button.js
Button.styles.js
header/
Header.js
Header.styles.js
modules/
foo/
bar/
This is Header:
import React from "react";
import { AppBar, Toolbar, Typography } from "@material-ui/core";
import useStyles from "./Header.styles";
const Header = () => {
const classes = useStyles();
return (
<AppBar position="fixed" className={classes.appBar}>
<Toolbar>
<Typography variant="h5">LineupFarm</Typography>
</Toolbar>
</AppBar>
);
};
export default Header;
This is components/index.js
import Header from "../components/Header/Header";
import Menu from "../components/Menu/Menu";
export default {
Header,
Menu,
};
... and this is my App.js:
import React from "react";
import { Route, Switch } from "react-router-dom";
import { ThemeProvider, CssBaseline, Toolbar } from "@material-ui/core";
import { Header, Menu } from "../components"; // <------------ Getting error: "Menu not found in '../components'" Why?
function App() {
const classes = useStyles();
return (
<div className={classes.root}>
<CssBaseline />
<Header />
<Menu />
<main className={classes.content}>
</main>
</div>
);
}
export default App;
Why am I getting error "Menu not found in '../components'"? What am I doing wrong?
I have a trivial problem. Having this file structure, I'd like to expose all components (in index.js) so they are reachable in App.js, like that: import { Header, Menu } from "../components";
. But I'm getting error that neither Home
nor Menu
are in the components. Here is the structure:
src/
index.js
app/
App.js
createStore.js
reducers.js
components/
index.js <--------------- In here, I'd like to export all components
button/
Button.js
Button.styles.js
header/
Header.js
Header.styles.js
modules/
foo/
bar/
This is Header:
import React from "react";
import { AppBar, Toolbar, Typography } from "@material-ui/core";
import useStyles from "./Header.styles";
const Header = () => {
const classes = useStyles();
return (
<AppBar position="fixed" className={classes.appBar}>
<Toolbar>
<Typography variant="h5">LineupFarm</Typography>
</Toolbar>
</AppBar>
);
};
export default Header;
This is components/index.js
import Header from "../components/Header/Header";
import Menu from "../components/Menu/Menu";
export default {
Header,
Menu,
};
... and this is my App.js:
import React from "react";
import { Route, Switch } from "react-router-dom";
import { ThemeProvider, CssBaseline, Toolbar } from "@material-ui/core";
import { Header, Menu } from "../components"; // <------------ Getting error: "Menu not found in '../components'" Why?
function App() {
const classes = useStyles();
return (
<div className={classes.root}>
<CssBaseline />
<Header />
<Menu />
<main className={classes.content}>
</main>
</div>
);
}
export default App;
Why am I getting error "Menu not found in '../components'"? What am I doing wrong?
Share Improve this question asked Jul 4, 2020 at 3:59 Ish ThomasIsh Thomas 2,4305 gold badges39 silver badges63 bronze badges 2 |5 Answers
Reset to default 15In your index.js you can just directly do
export {default as Header} from "../components/Header/Header";
export {default as Menu} from "../components/Menu/Menu";
In this way we're importing the default export from the module of your choice and exporting it as a namespaced module.
Now you can import components as
import {Header, Menu} from "../components";
Your original syntax is exposing an object outside. If you want to use it in App.js
, you may take the following code as reference
//App.js
import Component from "../components";
return (
<div className={classes.root}>
<CssBaseline />
<Component.Header />
<Component.Menu />
<main className={classes.content}>
</main>
</div>
);
//
From my experience, the following code may work if you wanna use import {Header, Button} from "../components"
// in index.js
export {default as Button} from "../components/Button/Button"
export {default as Header} from "../components/Header/Header"
//in App.js
import {Button, Header} from "../components"
You can alternatively export components like this:
Your index.js
:
export Menu from "../components/Menu/Menu"
export Header from '../components/Header/Header"
Then you can access all your components by importing it like this:
import * as Components from "../components"
Alternatively, you can simply write this:
import { Menu, Header} from "../components'
it is a babel plugin called @babel/plugin-proposal`export-default-from
. You may refer to this link
In your index.js, you have
export default {
Header,
Menu,
};
which is exporting a default object with the properties Header
and Menu
, rather exporting individual named properties.
With your current setup you could do the following in App.js:
// the name you use here is up to you, because it is a default export
import components from "../components";
const Header = components.Header;
...
<Header>
But more likely what you want is to remove the default
from the export in index.js, so you can import your individual components by name.
You can read more about default vs. named exports here on MDN.
Just remove the default it works perfectly well
import Header from "../components/Header/Header";
import Menu from "../components/Menu/Menu";
export {
Header,
Menu,
};
本文标签: javascriptHow to export all components in indexjsStack Overflow
版权声明:本文标题:javascript - How to export all components in index.js? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1738484038a2089313.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
Menu
in the export – charlietfl Commented Jul 4, 2020 at 4:03components
folder – blankart Commented Jul 4, 2020 at 4:11