티스토리 뷰
리액트를 사용하다 보면 필수적으로 이용되는 문법이 export와 import이다.
하지만, export의 사용과 import의 사용이 제각각이라 이를 정리하려고 한다.
모듈이란?
모듈은 마치 레고의 한 조각과 같다. 리액트가 각광받는 이유도 컴포넌트 하나하나를 각각 관리할 수 있기 때문이다.
과거 바닐라 자바스크립트로 처음 자바스크립트를 접했던 때를 떠올려보면, script.js 하나로 수 많은 html 파일의 스크립트 로직을 짰던 기억이 있을 것이다.
어떻게 연결 돼 있는지 읽기조차 힘든 긴 script.js 파일 하나를 여러개의 모듈로 쪼개고, 해당 스크립트에 적용하는 jsx도 따로 분리해 가독성도 유지보수도 편리해 진 것이다(물론 바닐라자바스크립트로도 모듈을 사용하지만, 리액트가 컴포넌트를 적극적으로 이용하기에 예시를 들었다).
js파일 하나하나가 모듈이다. 때문에 이 모듈들을 사용하기 위해서는 한 컴포넌트에서 다른 컴포넌트로 불러와야 하는데 이때 export와 import를 사용하는 것이다.
Export 하기
모듈 하나를 다른 모듈에서도 이용할 수 있게 내보내려면 export 해야한다.
export에는 크게 두가지 방법이 있는데
하나는 해당 모듈에서 딱 하나만 내보내는 방법,
다른 하나는 모듈 내 여러 함수들을 내보내는 방법이 있다.
하나만 내보내는 방법은 리액트에서 자주 접했을 export default 방법이다.
const person = () => {
return (
<div>
</div>
)
}
export default person; //이 파일에는 person이라는 이름의 유일한 모듈 하나만 export 할 수 있다.
여러 함수를 내보내는 방법은 아래와 같이 이용한다. 이를 named export라 부른다.
export function person(user) {
console.log(`Hello, ${user}!`);
}
export function name(user) {
console.log(`I'm ${user}!`);
}
export를 중복해서 쓰지 않고 한번에 내보내고 싶을 땐 아래와 같이 이용한다.
function person(user) {
console.log(`Hello, ${user}!`);
}
function name(user) {
console.log(`I'm ${user}!`);
}
export {person, name};
Import 하기
import 규칙은 default export와 named export가 다르다.
default export는 해당 모듈에 유일한 모듈이기 때문에 export 했을 때 정해준 이름을 굳이 쓰지 않고 다른 이름으로 바꿔도 된다. 하지만 코딩 컨벤션 상, 혼란을 방지하기 위해 그대로 사용하곤 한다.
named export는 해당 모듈에 여러 모듈 중 하나 이기 때문에 export 했을 때 정해준 이름을 그대로 사용해야한다. 이는, default export처럼 이름을 바꿔 import 한다면 오류가 발생한다.
또한 중괄호를 써야 한다.
예시를 보자.
import person from './person.js' //exported as default
import {person, name} from './person.js' //export as named modules
하지만 named export의 이름을 바꿔서 import 시키고 싶으면 'as' 를 사용하면 된다.
import {person as me, name as family} from './person.js'
여러가지 named export를 한번에 import 시키고 싶으면 '*'를 사용하면 된다.
CSS 스타일링할 때 모든 요소를 포함시키고 싶을 때 많이 보았을 것이다.
꺼내서 쓰고 싶을 땐, export 시켰던 각각의 이름을 사용한다.
import * as me from './person.js'
me.person('Lee');
me.name('Lee');
참고:
'Basic_Studies > JavaScript' 카테고리의 다른 글
[JavaScript] 자바스크립트 불변성, 가변성 (0) | 2021.03.20 |
---|---|
[JavaScript] null, undefined, undeclared 차이 (0) | 2021.02.28 |
[JavaScript] 구조 분해 할당(Destructuring assignment) (0) | 2020.12.15 |
[JavaScript] 콜백함수(Call-back function) (0) | 2020.09.16 |
[JavaScript] 삼항연산자(Ternary operator) (0) | 2020.09.06 |
- Total
- Today
- Yesterday
- 카페음료테스트
- getserversideprops redirect
- react router
- css 글래스모피즘
- NextJS
- 백준 10989 파이썬
- 리액트 컴포넌트
- 파이썬 크롤링
- 리액트 스크롤
- 리액트 라우터
- vscode venv
- 파이썬 flask
- Til
- 글래스모피즘 구현
- 자바스크립트
- 리액트 파라미터 넘기기
- nuxt 공식문서 한글
- 파이썬 정렬
- 화이팅
- bs4 크롤링
- nextjs 파라미터 넘기기
- nuxt 공식문서
- 움직이는 글래스모피즘
- next.js 리다이렉트
- 글래스모피즘 애니메이션 구현
- css marquee
- nextjs 스크롤
- dvd 효과
- 10989 파이썬
- 리액트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |