[Vue] 컴포넌트 간 데이터 주고받기 (Props, Emit)

2024. 12. 23. 10:30· FE/Vue.js
목차
  1. Props
  2. Emit
728x90

Props

부모가 자식한테 넘겨주는 데이터

Emit

자식이 부모한테 넘겨주는 데이터

 


Props

defineProps 를 사용해서 자식 컴포넌트와 데이터를 주고 받는다.

 

App.vue

<script setup>
import Parents from "./components/Parents.vue";
</script>
<template>
<Parents></Parents>
</template>
<style scoped></style>

 

 

Parents.vue

<script setup>
import { ref } from "vue";
import Child from "./Child.vue";
const toChild = ref("");
</script>
<template>
<h1>부모 컴포넌트</h1>
<p>부모가 작성한 메시지: {{ toChild }}</p>
<input type="text" v-model="toChild" />
<Child :message="toChild"></Child>
</template>
<style scope></style>

 

 

Child.vue

<script setup>
import { defineProps } from "vue";
const props = defineProps({
message: {
type: String,
required: true,
},
});
</script>
<template>
<h3>자식 컴포넌트</h3>
<p>부모로부터 받은 메시지: {{ message }}</p>
</template>
<style scope></style>

 

 

 

 

반복문을 통해 데이터 전달

Parents.vue

<script setup>
import { reactive } from "vue";
import Child from "./Child.vue";
const productList = reactive([
{
name: "상품01",
price: 14000,
},
{
name: "상품02",
price: 5000,
},
{
name: "상품03",
price: 21000,
},
]);
</script>
<template>
<h1>부모 컴포넌트</h1>
<ul>
<Child v-for="product in productList" :product="product"></Child>
</ul>
</template>
<style scope></style>

 

 

Child.vue

<script setup>
import { defineProps } from "vue";
const props = defineProps({
product: {
type: Object,
required: true,
},
});
</script>
<template>
<h3>자식 컴포넌트</h3>
<p>{{ product.name }}</p>
<p>{{ product.price }}</p>
</template>
<style scope></style>

 

 


Emit

defineEmits 를 통해 데이터를 주고 받는다.

 

Parents.vue

<script setup>
import { ref } from "vue";
import Child from "./Child.vue";
const fromChild = ref("");
const getMessage = (msg) => {
fromChild.value = msg;
};
</script>
<template>
<h1>부모 컴포넌트</h1>
<p>자식에게 전달받은 메시지: {{ fromChild }}</p>
<Child @send-message="getMessage"></Child>
</template>
<style scope></style>

 

 

Child.vue

<script setup>
import { defineProps, ref } from "vue";
const emit = defineEmits(["send-message"]);
const childMessage = ref("");
const sendMessage = () => {
emit("send-message", childMessage.value);
childMessage.value = "";
};
</script>
<template>
<h3>자식 컴포넌트</h3>
<input
type="text"
v-model="childMessage"
placeholder="부모에게 전달할 메시지"
/>
<button @click="sendMessage">전송</button>
</template>
<style scope></style>

input에 보낼 메시지를 입력
전송 버튼을 누르면 부모 컴포넌트에 데이터가 전달됨

728x90
저작자표시 비영리 변경금지 (새창열림)

'FE > Vue.js' 카테고리의 다른 글

[Vue] Vue Router 내비게이션 가드 / 로그인 기능 구현 (pinia-persistedstate)  (1) 2024.12.26
[Vue] Pinia 설치 / Store 사용 (loading, axios)  (0) 2024.12.23
[Vue] 데이터 바인딩 (ref, reactive) / 조건문, 반복문 (v-if, v-for) / v-model  (0) 2024.12.20
[Vue] Vue Router란? / Vue Router 사용 (router-link, useRouter)  (1) 2024.12.20
[Vue] VSCode에서 Vue.js 템플릿 설정 (Vue.js Snippet)  (3) 2024.12.20
  1. Props
  2. Emit
'FE/Vue.js' 카테고리의 다른 글
  • [Vue] Vue Router 내비게이션 가드 / 로그인 기능 구현 (pinia-persistedstate)
  • [Vue] Pinia 설치 / Store 사용 (loading, axios)
  • [Vue] 데이터 바인딩 (ref, reactive) / 조건문, 반복문 (v-if, v-for) / v-model
  • [Vue] Vue Router란? / Vue Router 사용 (router-link, useRouter)
셰욘
셰욘
셰욘
seiyeon
셰욘
전체
오늘
어제
  • 분류 전체보기 (176)
    • 알고리즘 (46)
      • 프로그래머스 (2)
      • 백준 (37)
      • 문제 유형 (7)
    • CS (41)
      • Linux (6)
      • DB (15)
      • 자료구조 (3)
      • OOP (2)
      • 아키텍처 (0)
    • BE (42)
      • Java (9)
      • Spring Boot (32)
    • FE (6)
      • Next.js (1)
      • JavaScript (5)
      • Vue.js (7)
      • Web (0)
    • 배포 (5)
    • 회고 (19)
      • BEYOND SW 캠프 (19)
    • 기타 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 블로그 관리

공지사항

인기 글

태그

  • 우선순위 큐
  • dfs
  • be
  • bfs
  • 프로그래머스
  • fe
  • 구현
  • Java
  • 알고리즘
  • 백준
  • Gateway
  • 트리
  • 그리디
  • 백트래킹
  • vue
  • AWS
  • db
  • spring boot
  • js
  • 티스토리챌린지
  • 실습
  • 네트워크
  • 회고
  • cs
  • 리눅스
  • 주간회고
  • DP
  • 자료구조
  • 오블완
  • web

최근 댓글

최근 글

250x250
hELLO · Designed By 정상우.v4.2.1
셰욘
[Vue] 컴포넌트 간 데이터 주고받기 (Props, Emit)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.