[Nuxt] composables, utils, types 폴더의 auto import 사용하기

2024. 8. 15.·🎨 프론트엔드 공부/Vue & Nuxt

📍composables

/composables 폴더에 기능 단위로 파일을 만들고 내부에서 use + 파스칼 케이스의 함수를 선언하고 개별 named export

- 예시) /composables/math.ts 생성

export function useSum(x: number, y: number) {
  return x + y;
}

// 화살표 함수 사용 가능
export const useMultiply = (x: number, y: number) => {
  return x * y;
};

export function useMinus(x: number, y: number) {
  return x - y;
}

export function useMyNumber() {
  // util 호출 가능
  return MY_NUMBER;
}

 

/pages/math.vue 에서 composable 사용

- auto import 동작하므로 import 필요 없음!

- IDE에서 모듈을 찾을 수 없다고 한다면 개발서버 실행해주면 됨(yarn dev)

<template>
  <div>
    <div>
      <h2>Composable Test</h2>
      <h2>one: {{ one }}</h2>
      <h2>four: {{ four }}</h2>
      <h2>zero: {{ zero }}</h2>
      <h2>777: {{ myNumber }}</h2>
    </div>
  </div>
</template>

<script setup lang="ts">
const one = useSum(0, 1);
const four = useMultiply(2, 2);
const zero = useMinus(5, 5);
const myNumber = useMyNumber();
</script>

 

utils 와 차이점

- composable은 util을 호출할 수 있음

- Vue Composable을 보관하는 용도

 

📍utils, types

- /utils 폴더에 기능 단위로 파일을 만들고 내부에서 자유롭게 named export

- /composables 와 똑같지만, composable은 use~ 함수만 가능, util은 함수 뿐만 아니라 모든 값 가능

- 예시) utils/math.ts 생성

export function sum(x: number, y: number) {
  return x + y;
}

export const multiply = (x: number, y: number) => {
  return x * y;
};

export const MY_NUMBER = 777;

 

/pages/math.vue 에서 util 사용

<template>
  <div>
    <div>
      <h2>Composable Test</h2>
      <h2>one: {{ one }}</h2>
      <h2>four: {{ four }}</h2>
      <h2>zero: {{ zero }}</h2>
      <h2>777: {{ myNumber }}</h2>
    </div>
    <div>
      <h2>Util Test</h2>
      <h2>seven: {{ seven }}</h2>
      <h2>ten: {{ ten }}</h2>
      <pre>{{ numberGroup }}</pre>
    </div>
  </div>
</template>

<script setup lang="ts">
const one = useSum(0, 1);
const four = useMultiply(2, 2);
const zero = useMinus(5, 5);
const myNumber = useMyNumber();

const seven = sum(2, 5);
const ten = multiply(1, 10);
const numberGroup = ref<AppMath.NumberGroup>({ one: 1, two: 2 });

onMounted(() => {
  numberGroup.value.one = 11111;
  numberGroup.value.two = 22222;
});
</script>

 

utils 에서 type이나 interface는 auto import 되지 않음

- 별도의 /types 폴더를 만들어서 type을 보관한다면, .d.ts를 사용해야 한다

(auto import 이외의 별도의 내부적 import 사용하면 예상치 못한 결과를 낳을 수 있음, 단, node_modules 에서 import는 괜찮음)

- 참고 링크

https://github.com/nuxt/nuxt/discussions/17527

 

/types/math.d.ts 생성

- namespace를 활용해서 혹시 모를 충돌을 줄이는 편이 좋을 듯 하다

declare namespace AppMath {
  interface NumberGroup {
    one: number;
    two: number;
  }
}

 

'🎨 프론트엔드 공부/Vue & Nuxt' 카테고리의 다른 글
  • <Vue 3와 타입스크립트로 배우는 프런트엔드 개발> ch1 ~ ch4
  • [Nuxt] 형제 컴포넌트끼리 데이터 공유하기
  • [Vue.js] 외부 라이브러리 사용하는 방법(+confetti effect)
  • [Vue.js] tutorial - 14. Slots
지식물원
지식물원
지식이 자라는 식물원!
  • 지식물원
    지식물원
    지식물원
  • 전체
    오늘
    어제
    • 분류 전체보기 (516)
      • 🎨 프론트엔드 공부 (253)
        • JS & TS (92)
        • HTML & CSS (22)
        • React & Next (49)
        • Vue & Nuxt (22)
        • 기타 (68)
      • 🤓 기술 학습 & 공부 기록 (116)
        • Node.js (0)
        • Python (37)
        • 백엔드 (0)
        • 딥러닝 (1)
        • 컴퓨터 일반 (72)
        • 개발 인프라 (6)
      • 👨‍💻 프로젝트 경험 (6)
        • Work (0)
        • Toy (6)
      • ⚙️ 개발 팁 & 노하우 (21)
        • 프론트엔드 (6)
        • 기타 (15)
      • ☕️ 커리어 & 인터뷰 준비 (88)
        • 코딩 테스트 (88)
      • 📰 기술 트렌드 & 생각 정리 (4)
      • 📚 기타 (25)
        • 마케팅 (15)
        • 비개발서적 (10)
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

    • 모바일 접속 시 코드 하이라이팅 깨질 때
  • 인기 글

  • hELLO· Designed By정상우.v4.10.3
지식물원
[Nuxt] composables, utils, types 폴더의 auto import 사용하기
상단으로

티스토리툴바