2017-09-13 6 views
0

원자 설계 방법론을 사용하는 React 앱이 있습니다. 내 구성 요소가과 같이 구성되어 있습니다React Atomic Design : 구성 요소 구성

components 
    |--Atoms 
    | |--Header 
    | | |--index.js 
    | | |--index.test.js 
    | | |--index.stories.js 
    | |--index.js 
    |--index.js 

Header/index.js, 나는 구성 요소의 기본 내보내기을한다. Atoms/index.js, 난과 같이, 모든 구성 요소를 내보내기 :

export Header from './Header' 

components/index.js에서 내가 지금처럼, 모든 레이어를 내 보냅니다

export * from './Atoms' 
export * from './Moleclues' 

내가 다른 구성 요소에서 구성 요소를 사용해야 할 경우, 나는 그것을 필요 components에서과 같이 : 내 테스트에서

import Header from './../..' 

, 나는 O를 할 수있는 방법 있도록 모의 구성 요소를 반환 './../..'을 별칭했습니다 nly 현재 테스트중인 구성 요소를 테스트하십시오.

지금까지이 패턴이 잘 작동했습니다. 그러나, 나는 일종의 순환 의존성이 있음을 깨달았다. 내가 알고있는 이유는 내 동화책 앱을 실행할 때 특정 컨테이너가 특정 구성 요소를 가져오고 구성 요소가 정의되지 않은 상태로 반환되어 컨테이너에서 오류가 발생하기 때문입니다.

이것은 한 특정 컨테이너에서만 발생하며 내 이야기 ​​책 앱에서만 발생합니다. 나는 왜이 컨테이너가 특히 실패 할 것인가를 결정할 수없는 이유와 내 이야기 ​​책 앱에서만 왜 그런지 알 수 없다. 그래서 순환 의존성 때문이라고 추측한다. 그러나 깨끗한 디렉토리 구조를 유지하면서 모든 구성 요소 가져 오기를 정적으로 유지하는 방법 (즉, 웹 팩에서 앨리어싱을 계속 수행 할 수 있도록 동일한 방법으로 읽게하는 방법)을 알고 싶습니다.

감사합니다.

import Header from './../../atoms' 

어디서나 내가만큼, 헤더가 필요 : 내가 일하는 결국 무엇

/* 
* Header.js 
* this exports an object { Header: Header } as default export 
* 
*/ 
export default { Header }  


/* 
* this imports the default member of the exports 
* from the Header module in the same directory. 
* 
*/ 
import Header from "/Header" 


/* 
* If you are transpiling with babel (for instance) you will have an undefined 
* export because what you actually have is 
*/ 

// Header.js 
exports = { Header: Header, __es6: true } 

// index.js 
const Header = require("./Header").default; 


/* 
* Note : your first example is a syntax error and should be 
*/ 
export { Header } from "./Header"; 


/* 
* to make it work correctly you need to 
*/ 
//Header.js 
export { Header }; 

// index.js 
export * from "./Header"; 

// your components 
import { Header } from "path/to/dir"; 
// this last line will find your directory according to your webpack config, as 
// it's a directory it will find the index.js and proceed from there 
+0

안녕하세요, index.js에서 구성 요소를 올바르게 내보내시겠습니까? 'export * from module "'은 기본 내보내기를 전달하지 않으므로 undefined를 반환합니다. 참조 : https : //developer.mozilla.org/ko-ko/docs/Web/JavaScript/Reference/Statements/export – adz5A

+0

나는 제대로하고 있다고 확신합니다. 'Atoms/index.js'에서 모든 명명 된 내보내기를 내보내므로'module *에서의 export *는 당신이 언급 한 기본 내보내기 문제로 넘어 가지 않아야합니다. – abustamam

+0

안녕하세요, 저는 이전에 언급 한 문서에서 여전히 기본 모듈을 다시 내보낼 때 줄에 입력해야한다는 것을 읽을 수 있습니다. 첫 번째 기본 멤버를 가져온 다음 이름이 지정된 내보내기로 다시 내보낼 수 있습니다. – adz5A

답변

0

다른 원자 안에 있지 않았다.

원자 설계에서는 구성 요소에 같거나 높은 수준의 구성 요소를 사용할 수 없습니다. 즉, 분자는 다른 분자 또는 유기체를 포함 할 수 없으며 원자 만 포함 할 수 있습니다. 그걸 염두에두면, 우리가 atoms 폴더에서 똑바로 당길 경우 순환 종속성이 없을 것입니다.

export Header from './Header'export * from './atoms 마찬가지로 이름이 지정된 내보내기로 모든 기본 내보내기가 완료되었으므로 올바르게 작동합니다.

가 조롱하는 문제를 해결하려면, 난 그냥 정규식 약간의 학습이 정규식, 구성 요소가 다른 구성 요소를 가져 모든 시간을 사용하여

/^(./?)../../(atoms|molecules|organisms|templates|pages)$/ 

를, 그것은 다른 모든 구성 요소를 조롱한다.

+0

죄송 합니다만, 'Export Header from'./Header '가 다른 모든 응용 프로그램 및이 응용 프로그램에서도 완벽하게 작동하기 때문에 올바르지 않습니다. 헤더를 'from Header from/Header' '이면'export {Header} '가 될 것이지만 다시 내보내기 만하므로 잘 동작합니다. 또한'. {Header as default} '를'./Header '에서 내보내려고했지만 그 중 하나도 작동하지 않았습니다. 앞서 언급했듯이 프로덕션 앱은 정상적으로 작동하지만이 문제가있는 스토리 북 앱에 불과합니다. – abustamam

0

이 있었다 당신이 당신의 모듈에서 회원을 수출하는 방식에서 실수가 여전히 있다고 생각