๐ Vue ์๋ช
์ฃผ๊ธฐ ๊ด์ ์ค๋ช
Hook |
์ค๋ช
|
mounted() |
์ปดํฌ๋ํธ๊ฐ DOM์ ๋ง์ดํธ(๋ ๋๋ง) ๋ ์งํ ํธ์ถ๋ฉ๋๋ค. ์ด ์์ ์์ DOM์ ์ ๊ทผํ๊ฑฐ๋ ํ์ด๋จธ ์ค์ ๋ฑ ์ด๊ธฐ ๋์์ ์ํํ ์ ์์ต๋๋ค. |
beforeDestroy() |
์ปดํฌ๋ํธ๊ฐ DOM์์ ์ ๊ฑฐ๋๊ธฐ ์ง์ ์ ํธ์ถ๋ฉ๋๋ค. ์ด๋๋ ํ์ด๋จธ, ์ด๋ฒคํธ ๋ฆฌ์ค๋, ๊ตฌ๋
๋ฑ์ ์ ๋ฆฌ(ํด์ )ํด์ผ ํฉ๋๋ค. ์ ํด์ฃผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐ์ ์ํ์ด ์์ต๋๋ค. |
โ
RightQuickMenu.vue
(.tag-btn ์๋ ์ ํ)
<template>
<div class="right-quick-menu">
<div class="quick-card play-card">
<img
src="https://img.megagong.net/m/2025/0715_playground/bnr_right_gong1.png"
alt="์ด๋ฒคํธ ์ด๋ฏธ์ง"
/>
</div>
<div class="quick-card coupon-card">
<p class="badge">30% ํ ์ธ<br />์ฟ ํฐ ์ฆ์ </p>
<p class="main-text">
e-๊ต์ฌ<br /><span class="blue">์ฒซ ๊ตฌ๋งค ์ด๋ฒคํธ</span>
</p>
<button class="detail-btn">์์ธํ ๋ณด๊ธฐ</button>
</div>
<div class="quick-card nextpass-card">
<p class="small">๋ชจ๋ ์ํ์์ ์ํ</p>
<p class="blue-bold">๊ณต๋ฌด์ ๋ฅ์คํธํจ์ค<br />๋ง์ถค ํ ์ธ ํํ</p>
<button
class="tag-btn"
:class="{ on: activeTag === 0 }"
>
์ ยทํ์ง ๊ณต๋ฌด์
</button>
<button
class="tag-btn"
:class="{ on: activeTag === 1 }"
>
ํฌ๋ง ์ธ๊ธฐ๊ฐ<br />(์ ์๋/์ฐจ์์)
</button>
</div>
</div>
</template>
<script>
export default {
name: "RightQuickMenu",
data() {
return {
activeTag: 0, // ํ์ฌ on ์ด ์ ์ฉ๋ tag ๋ฒํผ ์ธ๋ฑ์ค
intervalId: null, // setInterval ID ์ ์ฅ์ฉ
};
},
mounted() {
// โ
์ปดํฌ๋ํธ๊ฐ DOM์ ์์ ํ ๋ง์ดํธ๋ ํ ์คํ
// 3์ด๋ง๋ค activeTag๋ฅผ 0 โ 1๋ก ๋ณ๊ฒฝ (toggle)
this.intervalId = setInterval(() => {
this.activeTag = (this.activeTag + 1) % 2;
}, 3000);
},
beforeDestroy() {
// โ
์ปดํฌ๋ํธ๊ฐ ์ ๊ฑฐ๋๊ธฐ ์ง์ ์ ์คํ
// ํ์ด๋จธ ์ ๊ฑฐ๋ก ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์ง
clearInterval(this.intervalId);
},
};
</script>
โ
๊ฒฐ๊ณผ ์์ฝ
mounted()
โ ์๋ ๋ฐ๋ณต ํ์ด๋จธ ์์ (3์ด ๊ฐ๊ฒฉ์ผ๋ก ๋ฒํผ ๋ฒ๊ฐ์ ํ์ด๋ผ์ดํธ)
beforeDestroy()
โ ํ์ด๋จธ ์ ๋ฆฌ (๋ถํ์ํ ๋ฐ๋ณต ๋ฐฉ์ง ๋ฐ ๋ฆฌ์์ค ๊ด๋ฆฌ)
GitHub - heroyooi/vue2-megagong at ch6_resolve
๐ฌ ๋๊ธ
โป ๋ก๊ทธ์ธ ํ ๋๊ธ์ ์์ฑํ ์ ์์ต๋๋ค.