我遇到了一个javascript库,它使用以下语法来导入库:
import React, { Component, PropTypes } from 'react';
上面的方法和下面的方法有什么区别?
import React, Component, PropTypes from 'react';
import React, { Component, PropTypes } from 'react'
这将从'react'
模块中获取导出的{Component,PropTypes}
成员,并将它们分别分配给组件
和PropTypes
<代码>反应将等于模块的默认值导出。
正如下面torazaburo所指出的,这与
import { default as React, Component, PropTypes } from 'react'
这是
import { default as React, Component as Component, PropTypes as PropTypes} from 'react'
下面是另一个示例(链接到gist):
// myModule.js
export let a = true
export let b = 42
export let c = 'hello, world!'
// `d` is not exported alone
let d = 'some property only available from default'
// this uses the new object literal notation in es6
// {myVar} expands to { myVar : myVar }, provided myVar exists
// e.g., let test = 22; let o = {test}; `o` is then equal to { test : 22 }
export default { a, b, d }
// example1.js
import something from 'myModule'
console.log(something)
// this yields (note how `c` is not here):
/*
{
a : true,
b : 42,
d : 'some property only available from default'
}
*/
// example2.js
import something, { c } from 'myModule'
console.log(something) // same as above; the `default` export
console.log(c) // c === 'hello, world!'
// example3.js
import { a, b, d, default as something } from 'myModule'
console.log(a) // a === true
console.log(b) // b === 42
console.log(d) // d === undefined (we didn't export it individually)
console.log(something.d) // something.d === 'some property...'
我用Babel测试了第二个例子:
import test, test3, test2 from './app/lib/queries.js'
console.log(test, test3, test2)
并得到一个语法错误。
~/code/repo/tutoring $ babel-node test.js
/Users/royhowie/.node/lib/node_modules/babel/node_modules/babel-core/lib/babel/transformation/file/index.js:601
throw err;
^
SyntaxError: /Users/royhowie/code/repo/tutoring/test.js: Unexpected token (1:13)
> 1 | import test, test3, test2 from './app/lib/queries.js'
| ^
2 |
3 | console.log(test, test3, test2)
4 |
作为参考,您可以从MDN阅读新的import
文档。然而,它显然需要技术审查。Axel Rauschmayer博士的博文是目前更好的参考。
import React, { Component, PropTypes } from 'react';
这上面写着:
在名称react
下从'react'
导入默认导出,并在相同名称下导入命名导出组件和
PropTypes
。
这结合了你可能见过的两种常见语法
import React from 'react';
import { Component, PropTypes } from 'react';
第一个用于导入和命名默认导出,第二个用于导入指定的命名导出。
一般来说,大多数模块要么提供单个默认导出,要么提供命名导出的列表。模块同时提供默认导出和命名导出的情况稍不常见。但是,如果存在一个最常用的导入特征,但也存在其他子特征,则将第一个特征导出为默认特征,将其余特征导出为命名导出是有效的设计。在这种情况下,您将使用所引用的
import
语法。
其他答案介于错误和混乱之间,可能是因为提出这个问题时的MDN文件是错误和混乱的。MDN展示了这个例子
import name from "module-name";
并且说,
name
是“将接收导入值的对象的名称”。但这是误导和错误的;首先,只有一个导入值将被“接收”(为什么不说“分配给”或“用于引用”)name
,在这种情况下,导入值是模块的默认导出。
解释这一点的另一种方式是注意到上面的导入与
import { default as name } from "module-name";
OP的例子与
import { default as React, Component, PropTypes } from 'react';
MDN文档接着展示了这个示例
import MyModule, {foo, bar} from "my-module.js";
并声称这意味着
导入整个模块的内容,其中一些还显式命名。这将在当前范围中插入
myMoules
(原文如此)、foo
和bar
。注意foo
和myModule.foo
是相同的,因为是bar
和myModule.bar
MDN在这里所说的,以及其他基于不正确的MDN文档的答案所声称的,都是绝对错误的,并且可能是基于规范的早期版本
导入默认模块导出和一些明确命名的导出。这会将
MyModule
、foo
和bar
插入当前范围。导出名称foo
和bar
无法通过MyModule
访问,这是默认导出,而不是覆盖所有导出的某个伞。
(默认模块导出是使用
export default
语法导出的值,也可以是export{foo as default}
)
MDN文档编写者可能会对以下表单感到困惑:
import * as MyModule from 'my-module';
这将从
my-模块
导入所有导出,并使它们可以在MyModule.name
等名称下访问。默认导出也可以作为MyModule.default
访问,因为默认导出实际上只不过是另一个名为默认
的命名导出。在此语法中,无法仅导入命名导出的子集,尽管可以导入默认导出(如果有的话)以及所有命名导出
import myModuleDefault, * as myModule from 'my-module';
问题内容: 我遇到了一个使用以下语法导入库的javascript库: 上面的方法和下面的方法有什么区别? 问题答案: 这说: 从名称下导入 默认* 导出,并以相同的名称导入 命名的 导出。 * 这结合了您可能已经看到的两种常见语法 第一个用于导入和命名默认导出,第二个用于导入指定的命名导出。 通常,大多数模块将提供单个默认导出或命名导出列表。模块同时提供默认导出 和 命名导出的情况要少一些。但是,
这似乎很明显,但我发现自己有点困惑,什么时候在ES6中为导入单个模块使用花括号。例如,在我正在处理的React-Native项目中,我有以下文件及其内容: 在todoReducer.js中,我必须在没有花括号的情况下导入它: 如果将括在花括号中,则会得到以下代码行的以下错误: 无法读取未定义的属性todo 类似的错误也发生在我的带有花括号的组件上。我在想什么时候应该对单个导入使用花括号,因为很明显
问题内容: 我有两个文件,第一个是todoHelper.js 它有 以后我想在另一个文件中使用,我只是做 但是我也看到人们在默认情况下执行导出而不只是导出。有什么区别? 问题答案: 每个文件只能有一个导出默认值,因此当您导出默认值时,例如 您可以像导入 由于babel知道您正在尝试访问默认组件,因此可以使用任何名称在文件中访问它 现在假设你做 您可以在文件中包含多个此类导出,例如 当您导入时,您将
我有两个文件,第一个是todoHelper。js 它有 导入{addTodo} 但我也看到人们在做默认导出,而不仅仅是导出。有什么区别?
问题内容: 例如,如果括号/括号在以下情况中匹配: 依此类推,但如果括号/括号不匹配,则应返回false,例如: 等等。你能检查一下这个代码吗?提前致谢。 问题答案: 您的代码在处理’{‘和’}’字符时有些困惑。它应该与如何处理’(’和’)’完全平行。 这段代码经过您的稍微修改后,似乎可以正常使用:
我在看stackoverflow的另一页时,遇到了一个循环排序的工作实现,但我不明白在while循环中,带分号的语句如何在大括号之前存在。我认为while循环应该完全终止,一旦找到带有分号的语句,就不会执行进一步的操作,那么大括号中的代码是如何执行的呢?乍一看,我会将其解释为“var”随着while循环的每次迭代而递增——但我知道情况并非如此,因为将其从该点移除并将“var”放在花括号内会导致无限