# ref ํ์ดํ
๋ทฐ ํ์
์คํฌ๋ฆฝํธ ํ๋ก์ ํธ์์ ref
์์ฑ์ ํ์
์ ์ ์ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ด
๋๋ค.
# ref ์์ฑ์ด๋?
ref ์์ฑ์ ๋ทฐ์์ ํน์ DOM์ด๋ ์ปดํฌ๋ํธ์ ์ ๋ณด๋ฅผ ์ ๊ทผํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์์ฑ์ ๋๋ค.
<div ref="my"></div>
<script>
new Vue({
mounted() {
console.log(this.$refs.my); // HTMLDivElement
}
})
</script>
# ref ์์ฑ ํ์ ์ ์ ๋ฐฉ๋ฒ
๋ทฐ ์ปดํฌ๋ํธ ํ์ผ์์ ref
์์ฑ์ ์ฌ์ฉํ ๋๋ ์๋์ ๊ฐ์ด ํ์
์ ์ ์ํ ์ ์์ต๋๋ค.
ย
ย
ย
ย
ย
<template>
<div>
<div ref="my"></div>
</div>
</template>
<script lang="ts">
import Vue, { VueConstructor } from "vue";
export default (Vue as VueConstructor<
Vue & { $refs: { my: HTMLDivElement } }
>).extend({
mounted() {
this.$refs.my; // HTMLDivElement
}
});
</script>
# ๋ฐ๋ณต์ ์ธ ํ์ ์ฝ๋ ์ค์ด๋ ๋ฐฉ๋ฒ
์ปดํฌ๋ํธ๋ง๋ค ๋งค๋ฒ ์์ ๊ฐ์ ํํ์ ํ์ ์ ์ ์ํ๊ธฐ๊ฐ ๋ฒ๊ฑฐ๋กญ๋ค๋ฉด ์ฝ๋๋ฅผ ์ข ๋ ์ค์ผ ์ ์๋ ์ ๋ค๋ฆญ ํ์ ์ ์ ์ธํฉ๋๋ค.
// src/types.ts
type MyVue<T> = VueConstructor<Vue & T>;
type MyVueRefs<T> = VueConstructor<Vue & { $refs: T }>;
// App.vue
export default (Vue as MyVueRefs<{ my: HTMLDivElement }>).extend({
mounted() {
this.$refs.my; // HTMLDivElement
}
});
โ Vuex Typing Introduction โ