我们什么时候在 javascript 导入中使用“{ }”?
When do we use '{ }' in javascript imports?
我正在学习 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
您可以使用花括号 隐式地 和选择性地从另一个模块函数或对象等导入。
// import implicitly one function and one constant from example.js
import { a, b } from 'example'
example.js
// export a and b but kept c private to example.js
export const a => { ... }
export const b = "hello"
const c = "private, not visible to the outside"
更多信息:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import
https://developer.mozilla.org/en-US/docs/web/javascript/reference/statements/export
导入语句用于从另一个模块导入导出的绑定
大括号 ({}) 用于导入命名绑定,其背后的概念称为解构赋值解构赋值的概念是一个过程,可以将数组或对象中的值解包到不同的变量中在导入的模块中
花括号 ({}) 用于导入命名绑定
我想借助一个例子来解释 ES6 中不同类型的导入
假设我们有一个名为 Animals(Animals.js) 的模块,假设该模块导出一个默认绑定 Man
和其他几个命名绑定,例如 Cat
、Dog
等等
/*
Animals.js
*/
..
export Cat;
export Dog
export default Man
从模块导入单个导出
为了从另一个模块(假设是 Cat)导出单个导出,我们可以这样写
/*
Anothermodule.js
*/
import {Cat} from "./Animals"
同样适用于狗
/*
YetAnothermodule.js
*/
import {Dog} from "./Animals"
从模块导入多个导出
也可以导入多个模块如下
/*
Anothermodule.js
*/
import {Dog, Cat} from "./Animals"
使用更方便的别名导入导出
/*
Anothermodule.js
*/
import {Dog as Puppy} from './Animals.js';
在导入期间重命名多个导出
/*
Anothermodule.js
*/
import {Dog as Puppy, Cat as Kitty} from './Animals.js';
但是在将 Man 导入另一个模块的情况下,因为它是默认导出,你可以这样写
/*
Anothermodule.js
*/
import Man from './Animals.js';
例如,您也可以混合使用上述两种变体
/*
Anothermodule.js
*/
import Man, {Dog as Puppy, Cat as Kitty} from '/Animals.js';
导入整个模块的内容
如果你想导入所有你可以使用的东西
/*
Anothermodule.js
*/
import * as Animals from './Animals.js';
在这里,访问导出意味着使用模块名称(在本例中为“Animals”)作为命名空间。例如,如果你想在这种情况下使用 Cat,你可以像下面这样使用它
Animals.Cat
您可以阅读有关导入的更多信息here
你可以阅读解构here
{} 在您想要导入对象的一部分时使用。 * as searchView 将导入 searchView 文件中的所有属性和方法。
假设'./views/base'有3个属性:elements, renderLoader, additionalParam(假设这三个都在文件中作为named exports导出)
做的时候
import { elements, renderLoader } from './views/base'
您只导入这 2 个特定属性
但是当你这样做的时候
import * as base from './views/base'
您在名为 base 的对象中导入所有三个属性
import Search from './models/Search';
将 默认导出元素 导入为 Search
。
import * as searchView from './views/searchView';
将 所有 导入已导出的 searchView
。
import { elements, renderLoader } from './views/base'
导入指定数量的命名导出元素。
如果某些内容作为默认导出,则导入时不带花括号。
如果导出多个变量,则使用花括号导入。
例如,
在somefunction.js
export default module;
import module from './somefunction.js';
在someOtherFunction.js
export func1;
export func2;
import { func1, func2 } from './someOtherFunction.js'
您可以从单个模块中导出 1 个以上的内容。
例如您的代码:
import * as searchView from './views/searchView'; //1
import { elements, renderLoader } from './views/base' //2
在 //1
,您从 './views/searchView';
导入 一切
在 //2
,可能有更多来自 './views/base'
的内容,但您仅导入 elements and renderLoader
更多信息:import MDN
import { elements, renderLoader } from './views/base'
是您需要从模块导入单个命名导出的方式,在这种情况下,它是从导入 named exports elements
和 renderLoader
base.js
.
{ elements, renderLoader }
语法在许多情况下只是在 ECMAScript 标准的最新版本中添加的语法糖(称为 解构)。
不过,在这种情况下,只需要获取所需的命名导出即可。
请注意,您也可以像这样为您的变量选择新名称:
import { elements as newNameForElements, renderLoader as newNameForRenderLoader } from './views/base'
这将使 elements
导出可用 newNameForElements
等
举个例子:
要导入的文件,比如importedFile.js:
var defaultExport, otherExport1, otherExport2, otherExport3;
export default defaultExport = () => {
console.log("Default Export")
}
export otherExport1 = "Other non-default Export";
export otherExport2 = function() {
console.log("Some more non-default Export");
};
export otherExport3 = { msg: "again non-default Export" };
现在在您的主 JS 文件中,如果您要执行以下操作:
import something from './importedFile.js;
此处变量something
将获取variable/function的值,该值已作为默认值导出到importedFile.js文件中,即变量 defaultExport
。现在,如果您执行以下操作:
import { otherExport1, otherExport2 } from './importedFile.js;
它将专门导入 otherExport1
和 otherExport2
变量和函数,而不是 defaultExport
和 otherExport3
。
你也可以做类似下面的事情来从 importedFile.js:
导入所有变量的名称
import { defaultExport, otherExport1, otherExport2, otherExport3 } from './importedFile.js';
Conclusion:
- curly braces are used to choose variables/functions/objects (using a technique called object destructuring in ES6) that need to be imported without importing all the other unnecessary exported variables/functions/objects.
- If you don't specify curly braces, it would always import only the variable/function/object that has been exported as default and nothing else. It would import undefined if nothing has been exported as default export.
我正在学习 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
您可以使用花括号 隐式地 和选择性地从另一个模块函数或对象等导入。
// import implicitly one function and one constant from example.js
import { a, b } from 'example'
example.js
// export a and b but kept c private to example.js
export const a => { ... }
export const b = "hello"
const c = "private, not visible to the outside"
更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import
https://developer.mozilla.org/en-US/docs/web/javascript/reference/statements/export
导入语句用于从另一个模块导入导出的绑定
大括号 ({}) 用于导入命名绑定,其背后的概念称为解构赋值解构赋值的概念是一个过程,可以将数组或对象中的值解包到不同的变量中在导入的模块中
花括号 ({}) 用于导入命名绑定
我想借助一个例子来解释 ES6 中不同类型的导入
假设我们有一个名为 Animals(Animals.js) 的模块,假设该模块导出一个默认绑定 Man
和其他几个命名绑定,例如 Cat
、Dog
等等
/*
Animals.js
*/
..
export Cat;
export Dog
export default Man
从模块导入单个导出
为了从另一个模块(假设是 Cat)导出单个导出,我们可以这样写
/*
Anothermodule.js
*/
import {Cat} from "./Animals"
同样适用于狗
/*
YetAnothermodule.js
*/
import {Dog} from "./Animals"
从模块导入多个导出
也可以导入多个模块如下
/*
Anothermodule.js
*/
import {Dog, Cat} from "./Animals"
使用更方便的别名导入导出
/*
Anothermodule.js
*/
import {Dog as Puppy} from './Animals.js';
在导入期间重命名多个导出
/*
Anothermodule.js
*/
import {Dog as Puppy, Cat as Kitty} from './Animals.js';
但是在将 Man 导入另一个模块的情况下,因为它是默认导出,你可以这样写
/*
Anothermodule.js
*/
import Man from './Animals.js';
例如,您也可以混合使用上述两种变体
/*
Anothermodule.js
*/
import Man, {Dog as Puppy, Cat as Kitty} from '/Animals.js';
导入整个模块的内容
如果你想导入所有你可以使用的东西
/*
Anothermodule.js
*/
import * as Animals from './Animals.js';
在这里,访问导出意味着使用模块名称(在本例中为“Animals”)作为命名空间。例如,如果你想在这种情况下使用 Cat,你可以像下面这样使用它
Animals.Cat
您可以阅读有关导入的更多信息here
你可以阅读解构here
{} 在您想要导入对象的一部分时使用。 * as searchView 将导入 searchView 文件中的所有属性和方法。
假设'./views/base'有3个属性:elements, renderLoader, additionalParam(假设这三个都在文件中作为named exports导出)
做的时候
import { elements, renderLoader } from './views/base'
您只导入这 2 个特定属性
但是当你这样做的时候
import * as base from './views/base'
您在名为 base 的对象中导入所有三个属性
import Search from './models/Search';
将 默认导出元素 导入为 Search
。
import * as searchView from './views/searchView';
将 所有 导入已导出的 searchView
。
import { elements, renderLoader } from './views/base'
导入指定数量的命名导出元素。
如果某些内容作为默认导出,则导入时不带花括号。
如果导出多个变量,则使用花括号导入。
例如,
在somefunction.js
export default module;
import module from './somefunction.js';
在someOtherFunction.js
export func1;
export func2;
import { func1, func2 } from './someOtherFunction.js'
您可以从单个模块中导出 1 个以上的内容。
例如您的代码:
import * as searchView from './views/searchView'; //1
import { elements, renderLoader } from './views/base' //2
在 //1
,您从 './views/searchView';
在 //2
,可能有更多来自 './views/base'
的内容,但您仅导入 elements and renderLoader
更多信息:import MDN
import { elements, renderLoader } from './views/base'
是您需要从模块导入单个命名导出的方式,在这种情况下,它是从导入 named exports elements
和 renderLoader
base.js
.
{ elements, renderLoader }
语法在许多情况下只是在 ECMAScript 标准的最新版本中添加的语法糖(称为 解构)。
不过,在这种情况下,只需要获取所需的命名导出即可。
请注意,您也可以像这样为您的变量选择新名称:
import { elements as newNameForElements, renderLoader as newNameForRenderLoader } from './views/base'
这将使 elements
导出可用 newNameForElements
等
举个例子:
要导入的文件,比如importedFile.js:
var defaultExport, otherExport1, otherExport2, otherExport3;
export default defaultExport = () => {
console.log("Default Export")
}
export otherExport1 = "Other non-default Export";
export otherExport2 = function() {
console.log("Some more non-default Export");
};
export otherExport3 = { msg: "again non-default Export" };
现在在您的主 JS 文件中,如果您要执行以下操作:
import something from './importedFile.js;
此处变量something
将获取variable/function的值,该值已作为默认值导出到importedFile.js文件中,即变量 defaultExport
。现在,如果您执行以下操作:
import { otherExport1, otherExport2 } from './importedFile.js;
它将专门导入 otherExport1
和 otherExport2
变量和函数,而不是 defaultExport
和 otherExport3
。
你也可以做类似下面的事情来从 importedFile.js:
导入所有变量的名称import { defaultExport, otherExport1, otherExport2, otherExport3 } from './importedFile.js';
Conclusion:
- curly braces are used to choose variables/functions/objects (using a technique called object destructuring in ES6) that need to be imported without importing all the other unnecessary exported variables/functions/objects.
- If you don't specify curly braces, it would always import only the variable/function/object that has been exported as default and nothing else. It would import undefined if nothing has been exported as default export.