Javascript 我将如何导入这些es6导出?它们是命名为导出还是默认?
我正在查看Material UI项目中的代码,该项目似乎导出了一系列组件:Javascript 我将如何导入这些es6导出?它们是命名为导出还是默认?,javascript,reactjs,ecmascript-6,material-ui,Javascript,Reactjs,Ecmascript 6,Material Ui,我正在查看Material UI项目中的代码,该项目似乎导出了一系列组件: src/Dialog/index.js: export { default } from './Dialog'; export { default as DialogActions } from './DialogActions'; export { default as DialogTitle } from './DialogTitle'; export { default as DialogContent } fro
src/Dialog/index.js
:
export { default } from './Dialog';
export { default as DialogActions } from './DialogActions';
export { default as DialogTitle } from './DialogTitle';
export { default as DialogContent } from './DialogContent';
export { default as DialogContentText } from './DialogContentText';
export { default as withResponsiveFullScreen } from './withResponsiveFullScreen';
如果我试图修改这些,导入语句会是什么样子?他们是否导入模块并在同一行上导出?为什么不直接使用
导出默认对话框
语法 这与导入和命名导出基本相同
这个片段:
export { default as DialogActions } from './DialogActions';
大致相当于:
import DialogActions from './DialogActions';
export DialogActions;
如果您想在文件中使用它,可以使用命名导入,如下所示:
import { DialogActions } from './src/Dialog/index.js'
是的,它允许您使用单个
export
语句导入和重新导出模块,它是babelstage-1
预设的一部分,称为
export default from./Dialog'
也有效,请参见:index.js
是“魔法”,意思是“导出此目录”。这允许您将一组相关的内容分组到一个目录中,并能够直接从dir路径导入。在您的示例中,它有一个默认导出对话框
,其他导出为命名导出。因此,您可以导入以下内容:
import Dialog, { DialogTitle, DialogContent } from `path/to/DialogModule`
这比没有index.js
更好用:
import Dialog from 'path/to/DialogModule/Dialog/Dialog'
import Dialog from 'path/to/DialogModule/DialogTitle/DialogTitle'
import Dialog from 'path/to/DialogModule/DialogContent/DialogContent'
这也是一种方便的方式,可以指定该模块的用户想要公开的内容。目录中可能还有50个其他文件,这些文件在从path/to/DialogModule
导入时不可见如果index.js
是npm模块的主要导出,这一点特别有用。只有这些导出才会显示到使用该模块的另一个项目中(import
able)。在同一个目录中可能有许多其他的东西,他们不打算为用户提供
例如,文件结构可以是:
DialogModule/
├── actions.js
├── Dialog
│ ├── Dialog.css
│ ├── Dialog.js
│ ├── Dialog.test.js
│ └── index.js
├── DialogActions
│ ├── DialogActions.css
│ ├── DialogActions.js
│ ├── DialogActions.test.js
│ └── index.js
├── DialogContent
│ ├── DialogContent.css
│ ├── DialogContent.js
│ ├── DialogContent.test.js
│ └── index.js
├── DialogContentText
│ ├── DialogContentText.css
│ ├── DialogContentText.js
│ ├── DialogContentText.test.js
│ └── index.js
├── DialogTitle
│ ├── DialogTitle.css
│ ├── DialogTitle.js
│ ├── DialogTitle.test.js
│ └── index.js
├── index.js
├── SecretComponent1
│ ├── index.js
│ ├── SecretComponent1.css
│ ├── SecretComponent1.js
│ └── SecretComponent1.test.js
├── SecretComponent2
│ ├── index.js
│ ├── SecretComponent2.css
│ ├── SecretComponent2.js
│ └── SecretComponent2.test.js
├── util
└── util.test.js
要从“/Dialog/index”导入{DialogActions,DialogTitle,DialogContent}之类的操作?@NanduKalidindi是的,这就是我感到困惑的地方。为什么要将这些作为命名导出导入(使用
{
)如果我们导出的是默认值
?您始终可以使用从导入对话框操作。
,但可能他们决定公开单个文件中的所有导出,以便最终用户更容易进行多个模块导入,而不必编写多个导入语句。是的,这就是我感到困惑的地方。为什么我们将这些作为命名导出导入(使用{
)如果我们正在导出一个默认的
模块,如您提供的代码片段中所示:从“/DialogActions”导入DialogActions;导出DialogActions;
对我来说,这看起来像是他们的一个设计选择,这样您就可以从“…”导入*一个文件来获得所有这些导出,而不是每个文件都导入如果模块包含副作用,uld也要确保正确的模块加载顺序,但我认为这里不是这样。所以这就是我困惑的地方:-DialogActions
是默认导出,但我必须将其作为命名导出导入?import{DialogActions}from./src/Dialog/index.js'