const changeStatus = async (e) => {
e.stopPropagation();
canSee.value = !canSee.value;
await nextTick();
console.log(canSee.value, divRef.value)
}
</script>
<template>
<button @click="changeStatus">Status</button>
<h1 v-if="canSee" ref="divRef">{{ msg }}</h1>
...
위의 케이스를 보면 changeStatus 를 통해 canSee 값을 바꿔준다. 이 때, nextTick이 없었다면, console.log(canSee.value, divRef.value)
여기서 만약에 canSee가 이전 줄에서 true로 바뀌었어도, 즉, h1 태그를 referencing 할 수 있는 상황임에도 divRef는 null 로 나온다. 즉, 리렌더링된걸 반영하지 못하고 출력한다. 하지만, nextTick을 사용해주면 divRef는 정상적으로 h1 element를 가리킨다(canSee가 true로 변했을 때). 이처럼 nextTick은 다음 렌더링이 완전히 끝날 때까지 기다리게 해주고, 그 다음에 그에 맞는 로직을 처리할 수 있도록 해준다.onErrorCaptured 의 경우에는 모든 에러를 캐치하지는 못하는데,
import { createApp } from "vue";
import "./style.css";
import App from "./App.vue";
const app = createApp(App);
app.config.errorHandler = function (err, vm, info) {
console.log(err, vm, info);
console.log("error occured");
};
app.mount("#app");
app.config.errorHandler
여기서는 모든 에러를 캐치한다. 따라서 앞서 말한 기능을 위해서는 이걸 활용하는 편이 좋을 것 같다. 로그로 에러를 관리하고 싶을 때도 여길 이용하면 좋을 듯 일종의 middleware로 생각. 어차피 FE 플젝 내에는 에러 로그를 적재하기 힘드므로, 따로 에러 로그를 visualization 하는 서버가 있으면 좋을 것 같다(이거 해보고 싶다).