vue3 lifecycle
업데이트:
카테고리: vue3
/태그: lifecycle
Toast
저장이 되었거나 오류가 있으면 상단에 창이 뜨도록 함 ⇒ toast
이라고 한다
//toast components
<template>
<div class="alert alert-success toast-box" role="alert">
</div>
</template>
<script>
export default {
props: {
message: {
type: String,
required: true
}
}
}
</script>
// 수정 페이지
<template>
<ToastAlert v-if="showToast" :message="toastMessage"/>
</template>
export default {
components: {
ToastAlert
},
setup() {
const showToast = ref(false)
const toastMessage = ref('')
const tiggerToast = (message) => {
showToast.value = true
toastMessage.value = message
}
const onSave = async () => {
const res = await axios.put('http://localhost:3000/todos/' + todoId, {
subject: todo.value.subject,
completed: todo.value.completed
})
// 갱신
originalTodo.value = {...res.data}
tiggerToast('SuccessFully saved!')
}
}
v-if로 보이지 않게 했다가 알림창을 띄워줘야할 떄 ture로 변환하여 해당 창을 보이게 한다.
해당 창을 일정시간만 띄우고 없애고 싶다면? ⇒ setTimeOut(() => {},시간(ms))
위의 함수는 중괄호 안에 있는 값을 일정 시간이 지나고나서 실행을 하기 때문에 알림창 같은 일정시간을 띄우고 자동으로 없어지는 것에 사용하기 매우 좋다
Vue Compoent Lifecycle
setup() 함수 안에서 OnMount(() ⇒ {})
해당 형식처럼 사용
onBeforeMount
: 돔에 마운트 되기전에 실행- template에 있는 컴포넌트를 선택하면 null 이 뜬다.
onMounted
: 돔에 마운트가 되고나서 실행- template에 있는 컴포넌트를 선택하면 해당 선택자가 출력된다.
onBeforeUpdate
: 상태가 업데이트 되기 전에 실행onUpdated
: 상태가 업데이트 되고나서 실행onBeforeUnmount
: 다른 페이지로 이동하기 전에 실행, 돔에 마운트된 요소들을 제거하기 전에 실행된다.onUnmounted
: 다른페이지로 이동하고 나서 실행
메모리 누수
Unmount 가 되서도 setTimeout에 있는 함수는 실행이 된다. 여기서 메모리 잡아먹어 메모리 누수가 발생한다.
onUnmounted(() => {
clearTimeout(timeout.value)
})
timeout.value = setTimeout(() => {
toastMessage.value = false
toastMessage.value = ''
toastAlertType.value = ''
},3000)
해당 함수를 Unmount 가 되었을 때 clearTimeout
을 이용 해당 함수를 중지시키면 된다.
Unmounted는 메모리 누수에 효과적으로 활용할 수 있다.
코드 재사용
코드를 작성하다 보면 같은 부분이 반복되는 경우가 존재 코드를 좀 더 간결하게 사용하기 위해 파일로서 사용
-
src
하위 폴더로composables
/hooks
로 폴더 생성 -해당기능.js
파일 생성import { ref, onUnmounted } from 'vue' export const useToast = () => { const showToast = ref(false) const toastMessage = ref('') const toastAlertType = ref('') const toastTimeOut = ref(null) const tiggerToast = (message,type = 'success') => { showToast.value = true toastMessage.value = message toastAlertType.value = type toastTimeOut.value = setTimeout(() => { toastMessage.value = false toastMessage.value = '' toastAlertType.value = '' },3000) onUnmounted(() => { clearTimeout(toastTimeOut.value) }) } return { toastMessage, toastAlertType, showToast, tiggerToast } }
-
원하는 기능을
export const 변수이름 = () ⇒ {}
에 저장후 밖에서 사용할 변수를 return에 포함시킨다. -
사용할 컴포넌트에 아래와 같이 코드를 작성한다.
import { useToast } from '@/composables/toast' const { toastMessage, toastAlertType, showToast, tiggerToast } = useToast()
return에 있는 변수와 함수를 안에 작성하고 그것을
useToast()
에 담는다.