반응형

Nuxt 프로젝트 생성

npx nuxi@latest init <project-name>

 

Nuxt 설치 후 
https://nuxt.com/docs/guide의 Directory Structure를 참고하여 자기가 필요한 기능들을 폴더로 만들고 해당파일을 만들면 그 기능이 활성화된다. 폴더를 만들땐 위의 링크에 나와있는데로 작성해야한다.

 

1.  app.vue

초기 파일에 app.vue파일에 내용을 다 지우고 작업을 시작하면된다.

//app.vue

<template>
  <NuxtLayout>
    <NuxtPage />
  </NuxtLayout>
</template>

 

2.  Layouts

layouts 관련 내용 (https://nuxt.com/docs/guide/directory-structure/layouts)

레이아웃을 만들기 위해 Root에 layouts라는 폴더를 만들고 기본이 되는 레이아웃을 파일을 만든다.ㅓ

기본이 되는 파일명은 default.vue가 되어야 한다.

//default.vue
<template>
  <div>
    <HeaderComp />
    <h1>this is layout</h1>
    <NuxtPage />
    <FooterComp />
  </div>
</template>

 

커스텀 레이아웃은 커스텀명.vue로 만들어야하고

//pages/페이지이름.vue

<script setup lang="ts">
definePageMeta({
  layout: 'custom'
})
</script>

레이아웃을 불러내야한다.

 

직접 불러내어 전체 레이아웃을 바꿀 수도 있다.

//app.vue

<script setup lang="ts">
// You might choose this based on an API call or logged-in status
const layout = "custom";
</script>

<template>
  <NuxtLayout :name="layout">
    <NuxtPage />
  </NuxtLayout>
</template>

클릭이벤트를 주어 레이아웃을 바꿀 수 있다.

<script setup lang="ts">
function enableCustomLayout () {
  setPageLayout('custom')
}
definePageMeta({
  layout: false,
});
</script>

<template>
  <div>
    <button @click="enableCustomLayout">Update layout</button>
  </div>
</template>

해당페이지에서만 바꿀수도 있다.

//pages/index.vue

<script setup lang="ts">
definePageMeta({
  layout: false,
})
</script>

<template>
  <div>
    <NuxtLayout name="custom">
      <template #header> Some header template content. </template>

      The rest of the page
    </NuxtLayout>
  </div>
</template>

//layouts/custom.vue

<template>
  <div>
    <header>
      <slot name="header">
        Default header content
      </slot>
    </header>
    <main>
      <slot />
    </main>
  </div>
</template>

3.  Pages

pages 관련 내용(https://nuxt.com/docs/guide/directory-structure/pages)

pages/index.vue는 ' / ' Route 이다. 

Dynamic Route & Nested Routes

 Dynamic Route는 pages의 폴더 경로를 이용해 활용한다. NextJS의 Route를 생각하면 쉽게 이해할 수 있다.

Directory Structure (폴더구성)
-| pages/
---| index.vue  => "/"

---| login.vue  => "/login"

---| haha/
-----| index.vue  => "/haha"

---| usersprofile/
---| index.vue =>"/userprofile" index가 우선권이 있다.
-----| [id].vue  => "/userprofile/유저의 id혹은 고유번호 기타 등등"

---| board-[group]/
-----| [id].vue  => "/board-게시판의종류 혹은 기타/게시물 번호"

 

 아래의 사례로 라우팅에 대한 확인도 할 수 있다.

<script setup lang="ts">
const route = useRoute()

if (route.params.group === 'admins' && !route.params.id) {
  console.log('Warning! Make sure user is authenticated!')
}
</script>

Page Metadata

페이지의 메타데이터를 활용하려면

<script setup lang="ts">
definePageMeta({
  title: 'My home page'
})
</script>

<script setup lang="ts">
const route = useRoute()

console.log(route.meta.title) // My home page
</script>

그밖의 메타데이터 활용은 문서 참조.

Navigation

페이지간 이동은  <NuxtLink>를 사용한다.

<template>
  <NuxtLink to="/about">
    About page
  </NuxtLink>
</template>

 

또한 이벤트로는 navigateTo 함수를 사용해서 이용할수도 있다.

<script setup lang="ts">
useTitle("메인");
const name = ref("");
const type = ref(1);

function navigate() {
  return navigateTo({
    path: "/search",
    query: {
      name: name.value,
      type: type.value,
    },
  });
}
</script>
<template>
  <div>
    <p>메인페이지 인디용~~</p>
    <button @click="navigate()">gogo</button>
  </div>
</template>
<style scoped>
h1 {
  color: red;
}
</style>

 

4. Components

Root폴더에 components폴더를 만든다. 또한 Nuxt에서는 따로 import하지 않고 바로 불러 올 수 있다.

// /components/KingBtn.vue

<template>
  <div>
    <button>im the king</button>
  </div>
</template>


// /pages/search.vue

<script setup lang="ts">
import 컴포넌트 이름 from '컴포넌트경로'
const show = ref(false);
</script>

<template>
  <div>
    <h1>search</h1>
    
    <LazyKingBtn v-if="show" />
    <!-- Component앞에 Lazy 접두사를 붙이면 컴포넌트가 지연 로딩이 되로록 설정할수 있다. 
    이를 통해 초기 로드시 컴포넌트를 불러오지 않고 컴포넌트가 실제로 필요한 시점에 
    비로소 로드되게끔 만드는 기능이다. -->
    
    <button @click="show = !show">King BTN</button>
    
    <component :is="import한 component이름"/>
  </div>
</template>

 

Client Component를 사용하기 위해서는 

[파일명.client.vue]로 파일이름을 지어주면 된다.

 

5. Error Page

에러페이지를 커스텀하기 위해서는 Root폴더에 error.vue를 만들어준다.

728x90

'VueJS > NUXT' 카테고리의 다른 글

Nuxt Kakao Map 연동  (0) 2024.08.25
Nuxt3__Data Fetch  (0) 2023.11.22

+ Recent posts