inflearn logo
강의

Course

Instructor

Getting Started with Vue 3

Vue Component Communication Methods

같은 레벨 자식에서의 이벤트 핸들링 방법 문의

303

juregon2

2 asked

1

섹션 3. Vue.js 컴포넌트 - Vue Component 통신방식에서 뷰는 항상 단방향으로(부모 -> 자식 = props, 자식 => 부모 = emit)으로 흐른다고 하셨는데요.

예를들어 A아래 B,C 컴포넌트가 있고, C 화면에 있는 버튼을 클릭하면 B에 어떤 액션이 일어나야한다고 하면 아래와 같이 설계하는게 맞는것인가 궁금합니다.

  1. B->A emit 이벤트 발생

  2. A에서 B로부터 전달받은 이벤트 핸들링으로 C에 내리고있는 toggle형 props 값 업데이트

  3. C에서 A에서 내린 props를 watch하고 있다가 값이 변경되면 액션 수행

제가 구상한 방식이 위와같은데 이게 최선인지 궁금합니다..
다른 좋은 방법이 있다면 조언 부탁드립니다.

javascript vue.js vue-3

Answer 3

1

juregon2

답변 감사합니다

0

captain

안녕하세요, 말씀하신 방식으로 watch를 거셔도 괜찮습니다. 다만, C에서 A로 이벤트를 올리고 A에서 업데이트된 데이터를 자연스럽게 B로 흘려 보내주시면 될 것 같아요. 그럼 watch가 필요 없을 것 같네요 :)

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.
juregon2님, 질문해주신 Vue 3 컴포넌트간의 통신 문제에 대하여 답변드립니다.

주신 설명대로, Vue에서 데이터는 부모에서 자식으로 단방향 흐름을 따르는 것이 기본 원칙입니다. 자식 컴포넌트에서 부모 컴포넌트로의 통신은 주로 이벤트 발생을 통해 수행됩니다. 같은 레벨의 컴포넌트 간 통신(예: B와 C)에 대한 질문인 경우, 설명해주신 방법이 일반적인 접근 방식 중 하나입니다. 즉, 통신이 필요한 두 컴포넌트(B, C)가 동일한 부모(A)를 공유하는 상황에서:

  1. B에서 발생한 이벤트를 A가 감지하게 하고,
  2. A는 이를 통해 B 또는 C에 대한 데이터(여기서는 props)를 변경하고,
  3. C는 해당 props의 변경 사항을 감지하여 필요한 액션을 수행합니다.

이는 직접적으로 서로 통신하지 않는 컴포넌트 간에 데이터를 전달하는 Vue의 리액티브 시스템을 활용하는 방법입니다.

다른 방법으로는, 상태 관리 라이브러리(Vuex 등)를 사용하는 방법이 있습니다. 이 경우, 공통 상태를 전역 상태로 관리하면서, B 컴포넌트의 액션이 변경한 상태를 C 컴포넌트에서 감지하고 반응할 수 있습니다. 이 방법은 컴포넌트 간의 결합을 줄이면서도 효율적인 상태 관리를 가능하게 해줍니다.

두 방법 중 상황에 맞는 방법을 선택하시면 됩니다. 전역 상태 관리가 필요하지 않은 간단한 경우에는 첫 번째 방법이 좋을 수 있고, 애플리케이션 규모가 커질수록 또는 여러 컴포넌트 간 상태 공유가 빈번히 필요한 경우에는 Vuex 같은 상태 관리 라이브러리의 사용을 고려해보시는 것이 좋습니다.

파일 생성 방법이 다른건가요?

0

37

1

개발 환경부터 만들고 싶은데 강의에 생략된건가요?

0

52

1

타입스크립트

0

45

1

Vue3에 대해

0

69

1

로컬이 안뜹니다..

0

108

1

Vue 개발자도구 timeline에 No events라 뜨는 문제

0

156

1

Parsing 오류

0

140

1

users 안 보임

0

154

1

vbc 단축키 질문

0

155

2

LEARN-VUE-JS 프로젝트 질문

1

242

1

yarn serve 를 실행하기 위한 조건이 있을까요?

0

436

1

volar(vue language features) 검색 안됨

0

868

3

안녕하세요 선생님 Event Emit 질문 드립니다.

2

425

1

다음 강의

1

270

2

vue 개발자도구 refresh event 문제

1

533

2

vue 개발자도구에서의 timeline

1

513

2

target[prop] 질문

1

336

2

Vue 개발자 도구가 변경사항이 있나요?

2

976

2

윈도우 터미널에서 powershell 사용 비추 이유

1

638

2

defineProps, defineEmit, defineModel 차이

1

759

2

파일이름을 소문자로시작하는건 어떤경우인가요

1

244

1

v-if, v-show 어떤 경우에 사용하나요?

1

488

2

학생할인 쿠폰번호 오류

1

468

2

클래스,아이디 바인딩 사용문의

1

198

2