동적 컴포넌트에 대해 더 알아야 할 내용이 있다.
ManageGoals.vue 파일에 입력필드가 있다고 해보자. 그리고 그 입력필드에 유저가 goal를 입력할 수 있다고 가정하자.
(dummy input 필드로서 이 값으로 뭔가를 하지는 않을 예정.)
<!--ManageGoals.vue-->
<template>
<div>
<h2>Manage Goals</h2>
<input type='text' />
</div>
</template>
유저가 하나 이상의 컴포넌트에서 뭔가를 입력할 수 있는 상황은 충분히 있을 수 있다.
이제 component태그로 컴포넌트를 동적으로 불러오자.
여기서 문제가 발생한다.
ManageGoals.vue 컴포넌트에 있는 입력필드에 입력값을 입력하고, 저장하기 전에 ActiveGoals.vue로 이동한 다음, 다시 ManageGoals.vue로 오면 입력한 값이 사라진다.
▼
▼
왜냐하면 component 요소로 컴포넌트를 바꿀 때 이전 컴포넌트는 DOM에서 제거되기 때문. 따라서 탭으로 컴포넌트를 바꾸면 입력필드가 DOM에서 제거되므로 입력 필드에 넣은 모든 값이 사라진다.
이건 우리가 원하는 방식이 아니다.
Vue가 제공하는 해결책 → 또 다른 내장 컴포넌트인 keep-alive 컴포넌트.
keep-alive로 동적 컴포넌트를 감쌀 수 있다.
<keep-alive>
<component :is="selectedComponent"></component>
</keep-alive>
keep-alive는 동적 컴포넌트 개념으로 component 컴포넌트와 함께 동작한다.
이름이 보여주는대로, keep-alive는 컴포넌트를 완전히 제거하지 않고 이들의 상태를 내부에서 캐시로 저장하도록 Vue에 알려준다.
따라서 keep-alive를 추가하여 입력필드에 입력값을 적고, Active Goals로 갔다가 다시 Manage Goals로 돌아와도 여전히 입력값을 볼 수 있다.
내부에서 이 텍스트는 완전히 지워지지 않고 Vue가 해당 정보를 가지고 있어서 내용이 지워지지않게 만들어준다.
keep-alive의 적용 여부는 구축하는것에 따라 달라지지만, 이 기능을 알고 있는 것은 유용하다.
▼
▼
** 출처: 모든 내용은 Udemy Vue-완벽가이드 강의를 기반으로 작성하였습니다.
'Vue.js' 카테고리의 다른 글
[Udemy Vue 완벽가이드 Section9] 121. 텔레포트(Teleport)를 활용하여 요소 이동시키기 (0) | 2023.09.01 |
---|---|
[Udemy Vue 완벽가이드 Section9] 120. 이론 적용하기 & 한가지 문제점 (0) | 2023.09.01 |
[Udemy Vue 완벽가이드 Section9] 118. 동적 컴포넌트 (component태그) (0) | 2023.08.30 |
[Udemy Vue 완벽가이드 Section9] 117. 범위가 지정된(scoped) 슬롯 (0) | 2023.08.30 |
[Udemy Vue 완벽가이드 Section9] 116. 슬롯에 대한 추가 정보(fallback 기본컨텐츠, $slots, #default) (0) | 2023.08.30 |