🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    프론트엔드

  • 해결 여부

    미해결

이벤트 발생관련 질문드립니다.

21.03.24 01:02 작성 조회수 126

3

안녕하세요 !

1) 뷰 컴포넌트의 통신은 기본적으로 1 way data flow를 원칙으로 하는데요 (데이터는 상위에서 하위로, 하위에서 상위로는 이벤트의 발생을 알리는것)  하위에서 event emit할때 인자값으로 데이터를 올려주는것은 원웨이 데이타 통신에 반하지 않는 개념인가요? 

2) 뷰에서는 불변성에 대해서 신경쓰지 않아도 되나요? 

예를들어 리액트같은경우 관리하는 데이터에 대해 push, remove 와 같이 직접수정하지 않고 concat, filter를 사용하는데요, 뷰에서는 모두 허용하며 관찰하고 동기화합니다. 그렇다면 각각에 대해 성능의 차이가 있는지 따로 구분없이 사용해도 되는지 궁금합니다.

답변 1

답변을 작성해보세요.

2

안녕하세요 지예님, 굉장히 재밌고 심도 있는 질문을 주셨네요 :) 리액트를 경험하신 상황에서 뷰를 배우고 계셔서 더 비교 분석이 쉬우실 것 같아요 :) 답변 드리겠습니다.

1. 하위 컴포넌트에서 상위 컴포넌트로 보내는 이벤트 에밋 전달 방식은 단방향 데이터 흐름 조건을 만족합니다. 예를 들어 하위의 data를 담아 상위에 보내셨을 때는 데이터 유효 범위가 달라서 원하시는대로 동작을 안할거에요. 뷰에서 이벤트 에밋이 있는 이유는 리액트에서 프롭스만 있어서 하위 컴포넌트에 콜백을 계속 내려줘야 하는 번거로움을 제거해 준다고 보시면 좋을 것 같아요 :)

2. 리액트는 Immutability. 뷰는 Reactivity 입니다. 뷰 시작하기 강의에서 다룬 Reactivity가 뷰에서 추구하는 궁극적인 목적이라고 보시면 될 것 같아요. 리액트에서 Mobx 써보셨으면 Mobx가 추구하는 목적이 Vue.js의 코어에 존재하고 있다라고 보시면 될 것 같습니다. 개인적인 생각에는 리액트도 뷰의 Reactivity와 같은 성질이 필요해서 Mobx나 Hooks의 useEffect가 나온 것 같아요.

불변성과 관련하여 배열 조작에 대한 질문을 남겨주셨는데요. 리액트에서는 불변성을 유지하기 위해 기존 데이터에 추가 데이터를 조합하여 새 데이터를 생성해야 번거로움이 있었다면 뷰에서는 원본 데이터 자체를 원하는대로 변경해도 성능에 영향 없이 UI를 개발해 나갈 수 있다고 보시면 됩니다. 배열 조작의 가장 큰 비교 사례는 리액트는 splice()가 안되고 뷰에서는 splice()로 편하게 개발할 수 있습니다 :)

수강해 주셔서 감사합니다!

정지예님의 프로필

정지예

질문자

2021.03.27

안녕하세요 ! 자세한 답변에 감사드립니다.

하지만 제대로 이해가 되지 않아 공식문서를 더 확인했는데요, 

vue 2 공식문서에서 다시 생긴 하위의 데이터를 상위에 동기화시키는 .sync 에대한 설명은 one way data flow를 지키지 않기때문에 사용할순 있지만, 권장하지 않는다고 나와 있으며,  v-on 과 emit으로 작동한다고 나와있습니다. 상위 질문이  v-on 과 emit으로 하위의 데이터가 변경될때마다 상위의 데이터를 변경하는것에 의문을 가져 질문드리게 되었습니다. 예시를 첨부드립니다. 

+ 결론적으로 확인하고 싶은 사항은 아래와 같습니다. 

Data flow 라는 개념은 Vue컴포넌트간의 관계에서의 데이터의 이동에 대한,

Data binding은 Vue와 템플릿간의 데이터 동기화에 대한 개념으로 이해했는데요 

따라서

"뷰는 템플릿과 Vue의 데이터를 양방향에서 동기화하는것을 지원하는 2 way data binding을 지원하지만, 컴포넌트간의 데이터 흐름에 있어서는 상위에서 하위로 내려가도록 관리하도록 권장하는 스타일가이드를 가진다."

라고 이해하였습니다.  이것이  맞을까요 ?

채널톡 아이콘