[Vue] Template Refs

chaewonΒ·2024λ…„ 7μ›” 26일
0
post-thumbnail

πŸ’» Template Refs

Vue의 선언적 λ Œλ”λ§ λͺ¨λΈμ€ λŒ€λΆ€λΆ„μ˜ 직접적인 DOM의 μž‘μ—…μ„ λŒ€μ‹  μˆ˜ν–‰ν•œλ‹€. ν•˜μ§€λ§Œ λ•Œλ‘  κΈ°λ³Έ DOMμš”μ†Œμ— 직접 μ ‘κ·Όν•΄μ•Ό ν•˜λŠ” κ²½μš°κ°€ μžˆμ„ 수 μžˆλ‹€. μ΄λ•Œ ref 특수 속성을 μ‚¬μš©ν•΄μ„œ μ‰½κ²Œ μ ‘κ·Όν•  수 μžˆλ‹€.

<input type="text" ref="input" />

refλŠ” 특수 속성이닀. 이 ref특수 속성을 톡해 마운트된 DOM μš”μ†Œ λ˜λŠ” μžμ‹ μ»΄ν¬λ„ŒνŠΈμ— λŒ€ν•œ μ°Έμ‘°λ₯Ό 얻을 수 μžˆλ‹€.


1. Refs μ ‘κ·Όν•˜κΈ°

Composition API둜 μ°Έμ‘°λ₯Ό μ–»μœΌλ €λ©΄ λ™μΌν•œ μ΄λ¦„μ˜ μ°Έμ‘°λ₯Ό μ„ μ–Έν•΄μ•Ό ν•œλ‹€.

  • μ»΄ν¬λ„ŒνŠΈκ°€ 마운트된 후에 μ ‘κ·Όν•  수 μžˆλ‹€.
  • <template> μ•ˆμ—μ„œ input으둜 Refs 참쑰에 μ ‘κ·Όν•˜λ €λŠ” 경우 λ Œλ”λ§λ˜κΈ° μ „μ—λŠ” μ°Έμ‘°κ°€ null일 수 μžˆλ‹€.
  • <template> μ•ˆμ—μ„œ $refs λ‚΄μž₯ 객체둜 Refs 참쑰에 μ ‘κ·Όν•  수 μžˆλ‹€.

2. V-for λ‚΄λΆ€ μ°Έμ‘°

v3.2.25 μ΄μƒμ—μ„œ λ™μž‘
v-forλ‚΄λΆ€μ—μ„œ refκ°€ μ‚¬μš©λ  λ•Œ refλŠ” 마운트 ν›„ μš”μ†Œ λ°°μ—΄λ‘œ μ±„μ›Œμ§„λ‹€.

<script>
  import { ref, onMounted } from 'vue'
  
  export default {
  	setup() {
  		const list = ref([1, 2, 3]);
  		const itemRefs = ref([]);
  
  		onMounted(() => console.log(itemRefs.value))
  		
  		return{ list, itemRefs }
  	}
 }
</script>

3. μ»΄ν¬λ„ŒνŠΈ Refs

refλ₯Ό μžμ‹ μ»΄ν¬λ„ŒνŠΈμ—λ„ μ‚¬μš©ν•  수 μžˆλ‹€. ref둜 μžμ‹ μ»΄ν¬λ„ŒνŠΈμ— 참쑰값을 μ–»κ²Œ 되면 μžμ‹ μ»΄ν¬λ„ŒνŠΈμ˜ λͺ¨λ“  속성과 λ©”μ„œλ“œμ— λŒ€ν•œ 전체λ₯Ό μ ‘κ·Όν•  수 μžˆλ‹€.
μ΄λŸ¬ν•œ 경우 λΆ€λͺ¨/μžμ‹ μ»΄ν¬λ„ŒνŠΈκ°„ μ˜μ‘΄λ„κ°€ 생기기 λ•Œλ¬Έμ— μ΄λŸ¬ν•œ 방법은 λ°˜λ“œμ‹œ ν•„μš”ν•œ κ²½μš°μ—λ§Œ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. 그리고 일반적으둜 ref보닀 ν‘œμ€€ propsλ₯Ό μ‚¬μš©ν•˜μ—¬ λΆ€λͺ¨/μžμ‹κ°„ μƒν˜Έμž‘μš©μ„ κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€.

child.vue

<template>
  <div>Child Component</div>
</template>

<script>
  import { ref } from `vue`;
  
  export default {
  	setup() {
  		const message = ref('Hello Child!');
  		const sayHello = () => {
  			alert(message.value);
  		};
  		return { message, sayHello };
  	},
  };
</script>

λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈμ—μ„œ μžμ‹ μ»΄ν¬λ„ŒνŠΈμ˜ μƒνƒœλ‚˜ λ©”μ„œλ“œμ— μ ‘κ·Όν•  수 μžˆλ‹€.

profile
μ˜λ¬Έμ€ 'μ‚Άμ˜ μˆ˜μ€€'을 κ²°μ •ν•˜κ³ , μ§ˆλ¬Έμ€ 'μ‚Ά 자체'λ₯Ό λ°”κΎΌλ‹€.

0개의 λŒ“κΈ€