-
React를 공부하다 보면 처음에 컴포넌트를 만들 때
`export default 함수명(){ return <></>}` 이런식으로 작성을 하게 되는데
`export`와 `export default`의 차이점이 뭔지 궁금해서 찾아보게 되었다.
export default 의 특징
하나의 모듈에는 대개 하나의 export default 가 존재한다. (모듈은 하나의 파일을 지칭하는 것)
`export default`로 모듈을 내보내게 된다면, `export`한 이름과 상관없이 `원하는 이름`으로 import가 가능하게 된다.
export default 예시
export default function Main() { console.log("foo"); }
이렇게 작성하면, `Main`이라는 함수의 이름을 내보냈지만,
원하는 이름으로 import를 해서 가져올 수 있다.
import Foo from "./Main.jsx"; function App() { return( <div> <Foo/> </div> )} export default App;
나는 분명 `Main` 이라는 이름으로 내보냈지만 `Foo`라는 이름으로 가져왔다.
그리고 `export default`로 선언하면, import 해서 가져올 때 `{ }` 중괄호를 빼고 가져올 수 있다.
또다른 예시
const Header = () => { return ( <div> <h1>여기는 헤더 영역 입니다!</h1> </div> ); }; export default Header;
`const`로 변수를 선언하고, 아래에 내보내기로 선언을 해보았다.
import Test from "./Header.jsx"; function App() { return( <div> <Test /> </div> )} export default App;
import로 불러왔을 때, 역시나 이름을 바꿀 수 있고,
import `{ } ` 중괄호 없이 불러올 수 있다.
named export
name export를 할 경우 반드시 `export`한 이름으로 `import`가 가능하다.
또 다른 특징은 `{ }` 중괄호로 감싸서 가져와야 한다.
예시
export default function Main() { console.log("foo"); } const Name = ["foo", "bar"]; export { Name };
Name을 내보내는 예시이다.
import { useEffect } from "react"; import Main from "./Main.jsx"; import { Name } from "./Main.jsx"; function App() { useEffect(() => { Main(); // foo console.log(Name); // "foo", "bar" }, []); return <div></div>; } export default App;
import 내용을 보면 `Main`과 `{ Name }` 의 차이점이 있을 것이다.
만약에 `{ Name }` 대신 다른 이름으로 불러오려고 하면 컴파일에 실패하고 존재하지 않는다고 나온다.
정리하자면
named export : export한 이름으로만 가져올 수 있으므로 어떤 것을 import하는지 정확히 알 수 있다.
export default : 원하는 이름으로 import할 수 있다.import { Setting } from '' //export는 불러서가져오기 가능
import Aaa from '' //export default로 한개만 가져오기
import Adasdfsd '' //export default로 이름 바꿔서 가져오기
import Adasdfsd , { apple } from '' //export default와 export 함께 가져오기
import * as S from '' //export 한방에 가져오기
결론
프로젝트마다 함수명을 어떻게 짓는지, 어떻게 컨벤션이 되어있는지에 따라 다르겠지만,
이렇게 정리해서 알아두니 차이점을 확실하게 알게 되었다!
`export default`를 사용해서 이름을 다르게 설정해서 가져오면 혼란을 야기할 수 있을 것 같다.
팀원과 함께 개발할 때는 이름을 일치하는 것이 좋을 것 같다는 생각을 하게 되었다.
'📚 이론정리 > React & Next.js' 카테고리의 다른 글
✏️ input tag의 defaultValue와 value (0) 2024.01.24 ✏️ React의 컴포넌트 폴더 구성은 어떻게 해야할까? (0) 2024.01.24 ✏️ react기초문법들 (0) 2024.01.22 ✏️ 생명주기(LifeCycle)소개 (class형 컴포넌트) (0) 2024.01.21 ✏️ React Hooks 최적화 React.meno,useCallback,useMemo (0) 2024.01.21 댓글