nuxt logo

문서 번역(비공식)

useNuxtData

데이터 페칭 컴포저블의 현재 캐시된 값을 액세스합니다.

useNuxtData는 명시적으로 제공된 키를 사용하여 useAsyncData, useLazyAsyncData, useFetchuseLazyFetch의 현재 캐시된 값에 액세스할 수 있게 해줍니다.

사용법

useNuxtData 컴포저블은 useAsyncData, useLazyAsyncData, useFetch, useLazyFetch와 같은 데이터 페칭 컴포저블의 현재 캐시된 값에 액세스하는 데 사용됩니다. 데이터 페칭 시 사용된 키를 제공함으로써 캐시된 데이터를 검색하고 필요에 따라 사용할 수 있습니다.

이는 이미 페칭된 데이터를 재사용하거나 Optimistic Updates 또는 계단식 데이터 업데이트와 같은 기능을 구현하여 성능을 최적화하는 데 특히 유용합니다.

useNuxtData를 사용하려면 데이터 페칭 컴포저블(useFetch, useAsyncData 등)이 명시적으로 제공된 키와 함께 호출되었는지 확인해야 합니다.

매개변수

  • key: 캐시된 데이터를 식별하는 고유한 키입니다. 이 키는 원래 데이터 페칭 시 사용된 키와 일치해야 합니다.

반환 값

  • data: 제공된 키와 연관된 캐시된 데이터에 대한 반응형 참조입니다. 캐시된 데이터가 없으면 값은 null이 됩니다. 이 Ref는 캐시된 데이터가 변경되면 자동으로 업데이트되어 컴포넌트에서 원활한 반응성을 제공합니다.

예제

아래 예제는 서버에서 최신 데이터를 페칭하는 동안 캐시된 데이터를 플레이스홀더로 사용하는 방법을 보여줍니다.

pages/posts.vue
// 'posts' 키를 사용하여 나중에 동일한 데이터에 액세스할 수 있습니다.
const { data } = await useFetch('/api/posts', { key: 'posts' })
pages/posts/[id\
// posts.vue (상위 경로)에서 useFetch의 캐시된 값에 액세스합니다.
const { data: posts } = useNuxtData('posts')

const route = useRoute()

const { data } = useLazyFetch(`/api/posts/${route.params.id}`, {
  key: `post-${route.params.id}`,
  default() {
    // 캐시에서 개별 게시물을 찾아 기본값으로 설정합니다.
    return posts.value.find(post => post.id === route.params.id)
  }
})

Optimistic Updates

아래 예제는 useNuxtData를 사용하여 Optimistic Updates를 구현하는 방법을 보여줍니다.

Optimistic Updates는 서버 작업이 성공할 것이라고 가정하여 사용자 인터페이스를 즉시 업데이트하는 기술입니다. 작업이 실패할 경우 UI는 이전 상태로 롤백됩니다.

pages/todos.vue
// 'todos' 키를 사용하여 나중에 동일한 데이터에 액세스할 수 있습니다.
const { data } = await useAsyncData('todos', () => $fetch('/api/todos'))
components/NewTodo.vue
const newTodo = ref('')
let previousTodos = []

// todos.vue에서 useAsyncData의 캐시된 값에 액세스합니다.
const { data: todos } = useNuxtData('todos')

async function addTodo () {
  return $fetch('/api/addTodo', {
    method: 'post',
    body: {
      todo: newTodo.value
    },
    onRequest () {
      // 페칭 실패 시 복원할 수 있도록 이전에 캐시된 값을 저장합니다.
      previousTodos = todos.value

      // 낙관적으로 todos를 업데이트합니다.
      todos.value = [...todos.value, newTodo.value]
    },
    onResponseError () {
      // 요청이 실패하면 데이터를 롤백합니다.
      todos.value = previousTodos
    },
    async onResponse () {
      // 요청이 성공하면 백그라운드에서 todos를 무효화합니다.
      await refreshNuxtData('todos')
    }
  })
}

타입

useNuxtData<DataT = any> (key: string): { data: Ref<DataT | undefined> }