다음 구문을 사용하여 라이브러리를 가져 오는 자바 스크립트 라이브러리를 발견했습니다.
import React, { Component, PropTypes } from 'react';
위의 방법과 다음의 차이점은 무엇입니까?
import React, Component, PropTypes from 'react';
다음 구문을 사용하여 라이브러리를 가져 오는 자바 스크립트 라이브러리를 발견했습니다.
import React, { Component, PropTypes } from 'react';
위의 방법과 다음의 차이점은 무엇입니까?
import React, Component, PropTypes from 'react';
답변:
import React, { Component, PropTypes } from 'react';
이것은 말한다 :
가져 오기 기본 에서 수출을
'react'
이름으로React
하고 가져 라는 이름의 수출Component
과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";
그리고 그것이 의미한다고 주장했다
일부는 명시 적으로 명명 된 전체 모듈의 내용을 가져옵니다. 이렇게하면
myModule
(sic)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-module
하면 에서 모든 내보내기를 가져 와서 MyModule.name
. MyModule.default
기본 내보내기는 실제로 이름을 가진 다른 명명 된 내보내기에 불과하기 때문에 로 액세스 할 수도 있습니다 default
. 이 구문에서는 명명 된 내보내기의 하위 집합 만 가져올 수있는 방법이 없지만 기본 내보내기가있는 경우 모든 명명 된 내보내기와 함께 기본 내보내기를 가져올 수 있습니다.
import myModuleDefault, * as myModule from 'my-module';
from '/path/to/my-module.js'
비록 내가 개인적으로 사용하지만 Babel은 받아 들인다 from '/path/to/my-module'
.
import React, { Component, PropTypes } from 'react'
이 보낸 사로 잡고 { Component, PropTypes }
으로부터 구성원을 'react'
모듈에 할당 Component
하고 PropTypes
각각. React
모듈의 default
내보내기와 동일합니다 .
아래의 torazaburo에 의해 언급 된 바와 같이 , 이것은
import { default as React, Component, PropTypes } from 'react'
약어입니다
import { default as React, Component as Component, PropTypes as PropTypes} from 'react'
다음은 또 다른 예입니다 ( link to 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 |
참고 import
로 MDN 의 새 문서를 읽을 수 있습니다 . 그러나 분명히 기술적 검토가 필요합니다. Axel Rauschmayer 박사의 블로그 게시물 은 현재 더 나은 참조입니다.
React
이름이 지정된 내보내기 Component
와 PropTypes
동일한 이름의 변수에 할당합니다 . 불행히도 MDN 문서는 잘못되었습니다. 2ality.com/2014/09/es6-modules-final.html을 참조하십시오 . 또한 가져 오기 구문은 구조 해제 할당과는 전혀 관련이 없습니다.
import
문서 "에 대한 귀하의 의견과 관련하여 해당 MDN 기사의 개정 내역을 검토 한 결과, 인용하는 부분은 페이지가 처음 작성된 지 1 년이 넘은 이후로 수정되지 않았습니다. 빠르게 변화.
example3.js
왜 인쇄 않았다 undefined
위해 console.log(d)
? 당신이 한 이후 export default { a, b, d }
당신은 그것을 수출했다 있도록 myModule.js
.
myModule.js
, 노트 a
, b
그리고 c
개별적으로 수출되었다. 즉, 다른 파일이 import { a } from 'myModule'
. 반면에, d
: 다른 모듈은 두 가지 방법으로 액세스 할 수 있도록 기본 내보내기로 작성되었습니다 import thisObjectContainsDefault from 'myModule'
과를 통해 액세스를 thisObjectContainsDefault.d
OR import { default as wrapperObject }
및 wrapperObject.d
. 두 번째 방법의 이점은에서 볼 수 있듯이 개별적으로 내 보낸 항목을 가져올 수도 있다는 것입니다 example3.js
.