남과 같이 해선 남 이상이 될 수 없다.

Vue

[Vue.js] 컴포넌트 - Refs

맨동 2021. 6. 30. 20:02
728x90

컴포넌트 - Refs

 

1.1 개념

비록 props와 이벤트가 존재하지만, 가끔은 자식 요소에 JavaScript를 이용해 직접 접근해야 하는 경우가 있습니다. 이 경우, ref 속성을 이용해 레퍼런스 ID를 자식 컴포넌트나 HTML 요소에 부여함으로써 직접 접근할 수 있습니다. 

mounted() {
    const h1El = document.querySelector('#hello')
    console.log(h1El.textContent)
}

원래의 경우라면 위처럼 DOM API를 사용하게 됩니다.

하지만 참조하겠다는 의미의 ref 라는 속성을 사용하면 해당 기능을 간단하게 사용할 수 있습니다.

1.2 Refs 사용 예시

//App.vue
<h1 ref="hello">Hello world!</h1>
export default {
  mounted() {
    console.log(this.$refs.hello.textContent)
  }

Vue에서 제공하는 ref라는 속성을 통해 해당 요소를 참조할 수 있습니다.

그 참조된 내용은 Vue의 $refs라는 객체에 해당하는 hello라는 이름으로 들어가서 저장이 되는 구조를 갖고 있습니다.

다만, HTML과 연결된 직후만 사용이 가능하므로 created()라는 라이프사이클에서는 사용이 불가합니다.

 

1.3 컴포넌트에서 Refs 사용 예시

//App.vue(부모 컴포넌트)
<Hello ref="hello" />
import Hello from '~/components/Hello'

export default {
  components: {
    Hello
  },
  mounted() {
    console.log(this.$refs.hello.$el)
  }
}
</script>

//Hello.vue(자식 컴포넌트)
<h1>Hello~</h1>

컴포넌트를 ref라는 속성으로 어떠한 이름(hello)으로 참조를 할 경우에는 참조된 이름 뒤쪽에 $el을 명시해줘야만 해당하는 내용을 참조할 수 있습니다.

그러나 여기서도 컴포넌트의 최상위 요소가 2개 이상이면 $el 속성으로 어떤 요소를 바라봐야하는지 알 수 없게 됩니다.

 

//App.vue(부모 컴포넌트)
export default {
  components: {
    Hello
  },
  mounted() {
    console.log(this.$refs.hello.$refs.good)
  }
}

//Hello.vue(자식 컴포넌트)
<h1>Hello~</h1>
<h1 ref="good">Good?</h1>

이러한 경우에는 자식 컴포넌트에 ref라는 속성에 이름을 명시하고 부모 컴포넌트에는 $el 이 아닌 $refs의 속성에 자식 컴포넌트에 명시한 이름을 코딩해주면 됩니다.

 

728x90

'Vue' 카테고리의 다른 글

[Vue.js] 컴포지션 API - props, context  (0) 2021.07.01
[Vue.js] 컴포지션 API  (0) 2021.07.01
[Vue.js] 컴포넌트 - Provide, Inject  (0) 2021.06.30
[Vue.js] 컴포넌트 - Slot  (0) 2021.06.30
[Vue.js] 컴포넌트 - Emit  (0) 2021.06.30