template ref
태그 같은 DOM element요소를 ref를 이용하여 접근하자
templateRef
기본
<script setup>
const inputRef = ref(null);
console.log('setup이후의 ref:', inputRef.value);//null
onMounted(()=>{
inputRef.value.value = 'hello ref'
console.log('마운트이후의 ref:', inputRef.value);
</script>
<template>
<div>
<input ref="inputRef" type="text" />
<p>
{{ inputRef }}
</p>
<!--mounted가 되어야만 출력가능하기때문에 에러
<p>
{{ inputRef.value }}
</p>
-->
<p v-if="inputRef">
{{ inputRef.value }}
</p>
<p>
{{ inputRef === $refs.inputRef }}
</p>
</div>
</template>
for을 통한 ref
<script setup>
import { ref, onMounted } from 'vue'
const arrayRefs = ref([]);
const fruits = ref(['사과', '딸기', '포도']);
onMounted(()=>{
arrayRefs.value.forEach(item => console.log('item1: ', item.textContent));
arrayRefs.value.forEach(item => console.log('item: ', item));
})
</script>
<template>
<div>
<ul>
<li
v-for="fruit in fruits"
:key="fruit"
ref="arrayRefs">변수이용: {{ fruit }}</li>
</ul>
<ul>
<li
v-for="fruit in fruits"
:key="fruit"
ref="element => arrayRefs.push(element.textContent)">함수 이용: {{ fruit }}</li>
</ul>
</div>
</template>
자식, 부모Component에서의 ref
권장하지않음(props
를 사용하자.)
<script setup>
에서는 expose를 따로 설정해줘야한다
자식Component
<template>
<div>
{{ $parent }} <!--부모접근가능-->
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue'
const message = ref('Hello Im Child');
const say = () =>{
console.log(message.value);
}
defineExpose({
message,
say,
})
</script>
부모Component
<script setup>
import { ref, onMounted } from 'vue'
import TemplateChildRefs from './TemplateChildRefs.vue'
const child = ref(null);
onMounted(()=>{
console.log('child.message', child.value.message);
child.value.say();
})
const parentHi = 'hi';
defineExpose({
parentHi,
})
</script>
<template>
<TemplateChildRefs ref="child"></TemplateChildRefs>
</template>
참고자료: Vue3 완벽 마스터: 기초부터 실전까지 - “기본편”
Javascript
👉 pinia기본
2023.05.05
👉 github pages에서 vue router 404 에러
2023.04.03
👉 object의 변수인 경우 ref와 reactive 어느 것을 사용할까
2023.04.02
👉 Route
2023.04.01
👉 Template ref
2023.03.26
👉 provide와 inject
2023.03.25
👉 slots
2023.03.24
👉 nonProps
2023.03.23
👉 v-model을 통한 3depth 양방향 바인딩
2023.03.22
👉 emit, component와 v-model을 통한 양방향 바인딩
2023.03.21
👉 props
2023.03.20
👉 watch
2023.03.19
👉 양방향 바인딩
2023.03.18
👉 event Parameter
2023.03.17
👉 Scope와 Closure
2023.03.17
👉 classStyleBinding
2023.03.16
👉 computed
2023.03.15
👉 Ref와 Reactive
2023.03.14
👉 notion page를 웹사이트에 삽입하기
2022.01.25
👉 Json
2021.04.16
👉 Javascript 배열
2021.04.15
👉 Javascript 객체
2021.04.14
👉 Javascript 클래스
2021.04.13
👉 Javascript 함수
2021.04.12
👉 Javascript 변수심화
2021.04.11
👉 Javascript 변수
2021.04.10
Frontend
👉 pinia기본
2023.05.05
👉 github pages에서 vue router 404 에러
2023.04.03
👉 object의 변수인 경우 ref와 reactive 어느 것을 사용할까
2023.04.02
👉 Route
2023.04.01
👉 Template ref
2023.03.26
👉 provide와 inject
2023.03.25
👉 slots
2023.03.24
👉 nonProps
2023.03.23
👉 v-model을 통한 3depth 양방향 바인딩
2023.03.22
👉 emit, component와 v-model을 통한 양방향 바인딩
2023.03.21
👉 props
2023.03.20
👉 watch
2023.03.19
👉 양방향 바인딩
2023.03.18
👉 event Parameter
2023.03.17
👉 Scope와 Closure
2023.03.17
👉 classStyleBinding
2023.03.16
👉 computed
2023.03.15
👉 Ref와 Reactive
2023.03.14
👉 notion page를 웹사이트에 삽입하기
2022.01.25
👉 간단한 반응형 메뉴갖는 웹 만들기
2021.08.04
👉 Json
2021.04.16
👉 Javascript 배열
2021.04.15
👉 Javascript 객체
2021.04.14
👉 Javascript 클래스
2021.04.13
👉 Javascript 함수
2021.04.12
👉 Javascript 변수심화
2021.04.11
👉 Javascript 변수
2021.04.10
👉 CSS Centering
2021.04.09
👉 CSS flexbox
2021.04.08
👉 CSS 변수
2021.04.07
👉 CSS Size
2021.04.06
👉 CSS layout
2021.04.05
👉 CSS 기본
2021.04.04
👉 HTML5 Data 속성
2021.04.03
👉 HTML의 다양한 태그
2021.04.02
👉 Visual studio code의 유용한 툴
2021.04.01
👉 HTML 기초
2021.04.01
Vue
👉 pinia기본
2023.05.05
👉 github pages에서 vue router 404 에러
2023.04.03
👉 object의 변수인 경우 ref와 reactive 어느 것을 사용할까
2023.04.02
👉 Route
2023.04.01
👉 Template ref
2023.03.26
👉 provide와 inject
2023.03.25
👉 slots
2023.03.24
👉 nonProps
2023.03.23
👉 v-model을 통한 3depth 양방향 바인딩
2023.03.22
👉 emit, component와 v-model을 통한 양방향 바인딩
2023.03.21
👉 props
2023.03.20
👉 watch
2023.03.19
👉 양방향 바인딩
2023.03.18
👉 event Parameter
2023.03.17
👉 classStyleBinding
2023.03.16
👉 computed
2023.03.15
👉 Ref와 Reactive
2023.03.14
댓글 쓰기