我们什么时候在javascript导入中使用'{}'?

Bon*_*ony 5 javascript ecmascript-6 javascript-import

我正在学习Javascript导入,当我们从另一个JS文件导入项目(函数,对象,变量)时使用花括号时我还没理解.

import Search from './models/Search';
import * as searchView from './views/searchView';
import { elements, renderLoader } from './views/base'
//elements is an object, renderLoader is a function
Run Code Online (Sandbox Code Playgroud)

sam*_*j90 6

import语句用于从另一个模块导入导出的绑定

大括号({})被用于导入命名绑定和其背后的概念被称为解构分配解构分配的概念是一个过程,使得能够从解包阵列的值或导入的模块中的对象分成不同的变量

花括号({})用于导入命名绑定

我想借助一个例子来解释ES6中不同类型的导入

假设我们有AA模块命名Aninmals(Animals.js)让假设模块导出一个默认绑定Man和其他几个命名绑定,例如Cat,Dog

/*
 Animal.js
*/
..
export Cat;
export Dog
export default Man
Run Code Online (Sandbox Code Playgroud)

从模块导入单个导出

为了从另一个模块导出单个导出(比如Cat),我们可以这样写

/*
 Anothermodule.js
*/
import {Cat} from "./Animals"
Run Code Online (Sandbox Code Playgroud)

同样对于狗

/*
 YetAnothermodule.js
*/
import {Dog} from "./Animals"
Run Code Online (Sandbox Code Playgroud)

从模块导入多个导出

您还可以按如下方式导入多个模块

/*
 Anothermodule.js
*/
import {Dog, Cat} from "./Animals"
Run Code Online (Sandbox Code Playgroud)

使用更方便的别名导入导出

/*
 Anothermodule.js
*/
import {Dog as Puppy}  from './Animals.js';
Run Code Online (Sandbox Code Playgroud)

导入期间重命名多个导出

/*
 Anothermodule.js
*/
import {Dog as Puppy, Cat as Kitty}  from './Animals.js';
Run Code Online (Sandbox Code Playgroud)

但是在将Man导入另一个模块的情况下,因为它是一个默认导出,你可以把它写成thie

/*
 Anothermodule.js
*/
import Man  from './Animals.js';
Run Code Online (Sandbox Code Playgroud)

例如,您也可以将上述两种变体混合使用

/*
 Anothermodule.js
*/
import Man, {Dog as Puppy, Cat as Kitty} from '/Animals.js';
Run Code Online (Sandbox Code Playgroud)

导入整个模块的内容

如果要导入可以使用的所有内容

/*
 Anothermodule.js
*/
import * as Animals from './Animals.js';
Run Code Online (Sandbox Code Playgroud)

在这里,访问导出意味着使用模块名称(在本例中为"Animals")作为命名空间.例如,如果您想在这种情况下使用Cat,您可以像下面一样使用它

Animals.Cat
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读有关导入的更多信息

你可以在这里阅读有关解构的内容


con*_*exo 4

import { elements, renderLoader } from './views/base'
Run Code Online (Sandbox Code Playgroud)

是您需要从模块导入单个命名导出的方式,在本例中,它是导入命名导出 elementsrenderLoaderbase.js.

在许多情况下,语法{ elements, renderLoader }只是ECMAScript 标准最新版本中添加的语法糖(称为解构)。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Object_destructuring

但在这种情况下,有必要仅获取所需的命名导出。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#Import_a_single_export_from_a_module

请注意,您还可以为变量选择新名称,如下所示:

import { elements as newNameForElements, renderLoader as newNameForRenderLoader } from './views/base'
Run Code Online (Sandbox Code Playgroud)

这将使elements导出可用newNameForElements等。

  • 这是完全错误的!`import { elements, renderLoader } from './views/base'` 与 `import elements from './views/base' 不同;从'./views/base'导入renderLoader。如果您没有默认导出“elements”或“renderLoader”,那么在第二种情况下,这两个变量都将是“undefined”。您必须使用大括号来选择它们才能正确导入,如下所示:`import {elements} from './views/base'; 从'./views/base'导入{renderLoader}。 (2认同)