shallowRef는 성능을 개선하고 컴포넌트를 불필요하게 반응형으로 만드는 것을 피하는 데 유용함
v-model
로 양방향 바인딩으로 업데이트 되는 데이터는 감시 못함input type=text :value="" @input=""
이런식으로 작성해야 감시 가능<template>
<Suspense>
<CustomComponent />
<template #fallback>
<div>Loading...</div>
</template>
</Suspense>
</template>
<script setup lang="ts">
// ...
const error = ref(null);
onErrorCaptured((e: Error) => (error.value = e));
// ...
</script>
<template>
<div class="space-up error" v-if="error">
{{ error }}
</div>
<Suspense v-else>
<CustomComponent />
<template #fallback>
<div>Loading...</div>
</template>
</Suspense>
</template>
router 이동시 params로 전달한 값은 이동된 페이지에서 props로 사용할 수 없음
라우터 이동할 때 렌더링되는 컴포넌트에 props 전달 방법
vue2, vue-router3 버전일 땐, router.push({ prams: { ... } })
방식으로 전달
라우터 설정쪽에선 props: true
로 설정
하지만 vue3, vue-router4 버전에선 라우터 설정에 패스파라미터가 정의가 안되어있으면 props
로 전달이 안됨
vue3, vue-router4에선 history.state로 전달해야됨
// vue3, vue-router4 라우터 이동시 아래와 같이 props 전달
await router.push({
name: 'xxx',
state: {
props: {
// ...
}
}
})
// 라우터 설정파일
const modalProps = () => ({
...cloneDeep(window.history.state.props),
});
const modals = [
{
path: '...',
name: '...',
component: '...',
props: modalProps,
}
]
const router = createRouter({ ... })
router.beforeEach((to, from) => {
// ...
// 탐색을 취소하려면 명시적으로 false를 반환합니다.
return false
})
https://router.vuejs.org/guide/advanced/navigation-guards.html#Optional-third-argument-next
선택적인 세 번째 인수 next
// BAD
router.beforeEach((to, from, next) => {
if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' })
// if the user is not authenticated, `next` is called twice
next()
})
// GOOD
router.beforeEach((to, from, next) => {
if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' })
else next()
})