Vue 구성 요소 간 데이터 전달, 기본
7456 단어 vue
딜레마
구성 요소(React, Vue, Svelte 및 Angular) 구축을 기반으로 하는 최신 프론트 엔드 UI 프레임워크를 사용하는 경우 대규모 데이터 집약적 프로젝트에서 몇 가지 매우 좋은 이점을 얻을 수 있습니다.
이 모든 풍부한 선량에도 불구하고 한 가지 큰 캐치를 얻습니다.
통신은 일반적으로 형제를 통하지 않고 부모와 자식 구성 요소 간에 발생하므로 상태 관리는 데이터가 구성 요소 트리를 통과하는 방법을 생각하는 게임이 됩니다. 어떤 사람들은 애플리케이션 수준에서 상태를 관리할 수 있는 Redux, NGRX, Vuex 및 MobX와 같은 라이브러리를 완전히 우회하지만 구성 요소의 캡슐화 및 재사용 가능성이 낮아질 수 있습니다.
이 기사에서는 Vue 구성 요소 간에 데이터를 트래버스하는 방법을 설명하고자 합니다. 먼저 우리는 항상 어떤 구성 요소가 어떤 구성 요소에 대해 말하고 있는지 생각해야 합니다.
#1 상위 => 직계 하위: Props/$attrs
부모 구성 요소에서 템플릿이 다음과 같다고 가정해 보겠습니다.
<template>
<Child/>
</template>
자식 구성 요소는 부모 템플릿에 의해 직접 렌더링되므로 이것을 직접 자식이라고 부를 것입니다. 이와 같이 Child 태그에 속성을 포함하여 정보를 전달할 수 있습니다.
<template>
<Child hello="world" v-bind:cheese="cheese"/>
</template>
여기에서 hello와 cheese의 두 가지 속성을 전달합니다. Hello는 문자열 세계를 자식 구성 요소로 직접 전달하는 것입니다. 두 번째 속성은 v-bind를 사용하여 데이터 개체에서 가져오기 때문에 이 경우에는 치즈라는 속성에 대한 데이터를 찾아 치즈라는 속성으로 자식에게 전달합니다.
이제 자식의 속성에 어떻게 액세스합니까? 기본적으로 모든 속성은 this.$attrs(속성)에 저장되므로 this.$attrs.hello 및 this.$attrs.cheese가 됩니다. 하지만 이것은 과도한 타이핑처럼 보입니다... 우리는 이것을 this.hello 및 this.cheese를 소품으로 가져옵니다. 이렇게 하려면 구성 요소 Vue 인스턴스에서 props를 선언해야 합니다.
export default {
name: "child",
props: ["hello", "cheese"]
}
props 속성을 추가하면 구성 요소가 속성을 예상하고 더 적은 문자로 액세스할 수 있는 곳으로 속성을 이동할 수 있습니다.
상위에서 라우터 보기로
Vue Router는 단일 페이지 애플리케이션이 다중 페이지 애플리케이션처럼 느껴지도록 만드는 훌륭한 도구이지만 데이터 전달이라는 한 가지 문제가 발생합니다. 일반적으로 구성 요소는 부모에 의해 직접 렌더링되며 거기에서 props를 전달할 수 있지만 라우터를 사용하면
component fills the gap on where a component would be depending on the url in the url bar.
To pass data we can use a query, how we pass down the query depends on whether we invoke the route using
```<router-link>```
or push. So you can see both below where we pass some information.
```html
<router-link :to="{path: '/route', query: {hello: 'world', cheese: this.cheese}}">
푸시를 사용하여
this.$router.push({path: '/route', query: {hello: 'world', cheese: this.cheese}})
그런 다음 이 데이터는 this.$route.query에 의해 라우터가 렌더링하는 뷰에서 사용할 수 있게 됩니다.
부모에게 데이터 보내기, 이벤트 발생
구성 요소 트리 위로 데이터를 보내는 것은 종종 더 어렵습니다. Vue와 Angular에서 자식은 부모가 반응하는 동안 들을 수 있는 이벤트를 내보냅니다. 실제로 props를 통해 부모로부터 메서드를 보내는 것 외에는 내장된 방법이 없습니다.
따라서 vue에서 작동하는 방식은 자식 구성 요소가 이벤트를 내보내고 이벤트와 함께 일부 데이터를 보내는 것입니다.
export default {
name: "Child",
methods: {
itHappened: function(){
this.$emit("it", {hello: "world", cheese: this.cheese})
}
}
}
그러면 부모가 이벤트를 수신하고 적절하게 처리할 수 있습니다.
<template>
<Child @it="handleIt($event)">
</template>
<script>
import Child from "./Child.vue"
export default {
name: "Parent",
components: {
Child
},
methods: {
handleIt: function(event){
console.log(event)
}
}
}
</script>
따라서 이벤트가 handleIt에 의해 기록되는 것을 볼 수 있습니다. 이벤트에는 원하는 작업을 수행할 수 있도록 전송된 데이터가 포함되어 있습니다.
결론
데이터는 구성 요소에서 구성 요소로 이동하는 것이 답답할 수 있지만 그렇게 하는 방법을 아는 것이 첫 번째 단계입니다. 또한 브라우저에 Vue devtools를 추가하는 것이 좋습니다. 그러면 구성 요소의 데이터를 언제든지 검사할 수 있으므로 끝없는 로깅 시간을 절약할 수 있습니다.
Reference
이 문제에 관하여(Vue 구성 요소 간 데이터 전달, 기본), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/alexmercedcoder/passing-data-between-vue-components-the-basics-22ki텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)