vue를 사용하다가 DOM 업데이트 된 이후에 작업이 필요한 경우에 코드를 작성하고 진행하지만, undefined에러 등 원하지 않는 결과가 나올 때가 있다. 그럴 때 다양한 해결 방법들이 있지만, 그 중 nextTick에 대해서 찾아보았다.
function nextTick(callback?: () ⇒ void): Promise
다음 DOM 업데이트 발생을 기다리는 유틸리티이며 Vue 내부 전역 API 공식 문법이다.
상태 변경 직후 DOM 업데이트가 완료될 때까지 대기하는데 사용한다.
DOM에 대한 업데이트는 비동기적으로 처리된다. Vue는 이를 감지하고 실제 DOM 업데이트를 수행
이 과정에서 DOM이 업데이트 되더라도 실제 렌더링이 브라우저에서 완료되기까지 지연이 존재 할 수 있다.
DOM이 렌더링 된 이후에 호출되므로 사용할 수 있을 것 같았다.아니다undefined가 나왔던 것이다.[ 방법 1 ]
onMounted(async () => {
console.log('1'); // 바로 실행
// nextTick 호출
await nextTick();
console.log('2'); // DOM 업데이트 후 실행
});
[ 방법 2 ]
onMounted(() => {
console.log('1');
nextTick().then(() => {
console.log('2');
});
});
onMounted(() => {
console.log('1');
nextTick(); // Promise는 반환되지만 기다리지 않음
console.log('2'); // DOM 업데이트 여부와 관계없이 실행
});