출처 : https://nuxtjs.org/docs/concepts/nuxt-lifecycle#nuxt-lifecycle
nuxt
를 해본 사람이라면 잘 아는 nuxt
라이프사이클 훅 흐름도이다.1.nuxtServerInit
2.plugins
3.middleware
4.asyncData
5.beforeCreate
6.created
7.fetch
8.plugins
9.beforeCreate
10.created
11.beforeMount
12.mounted
1.middleware
2.asyncData
3.beforeCreate
4.created
5.fetch
6.beforeMount
7.mounted
문제!!
async fetch(){
console.log('1. fetch start');
await this.dataFetching();
console.log('2. fetch end');
},
mounted(){
console.log('3. mounted');
},
methods:{
dataFetching(){
return new Promise((res,rej)=>{
setTimeout(()=>{
res();
},2000);
});
}
}
SSR
로 동작하는지CSR
로 동작하는지에 따라 답이 다르다.이유는?
다시 한번 흐름도를 살펴보자!
mounted
는 DOM이 렌더링되었을때 호출이 된다.
결과 먼저 보자면, 1 -> 2-> 3 순서로 실행이 된다.
fetch에 대한 설명
$fetchState.pending
의 상태를 찍어 본다면 true로 나온다. CSR시엔 false가 나옴.$fetchState
<template>
<div v-if="$fetchState.pending">Fetching 중 .... </div>
<div v-else>Fetching 종료</div>
</template>
<script>
export default{
async fetch(){
await ~~~~~~~
}
}
</script>
위와 같이 상태에 따른 분기처리가 가능하다.fetch 요약
마찬가지로 결과 먼저 보자면, 1 -> 3 -> 2 로 실행이 된다.
asyncData
를 사용하면 된다.asyncData
TMI : Fetch vs AsyncData?.
async asyncData(){
console.log('1. async start');
const data = await this.$axios.get('');
console.log('2. async end');
},
async fetch(){
console.log('3. fetch start');
const data = await this.$axios.get('');
console.log('4. fetch end');
},
mounted(){
console.log('5. mounted');
}
SSR
: 1(async start) → 2(async end) → 3 → 4 → 5CSR
: 1(async start) → 2(async end) → 3 → 5 → 4🔗 Nuxt의 비동기 데이터 호출 방법
🔗 Nuxt공식 문서 Data Fetcing 설명
🔗 Nuxt Async Data 블로그 글
🔗 Between Asyncdata and Fetch in Nuxt
멋있어용^^