Dev/Vue 25

Vue - 부모 컴포넌트가 자식 컴포넌트의 함수를 호출하는 방법

부모 컴포넌트에 추가된 자식 컴포넌트의 함수를 부모 컴포넌트 측에서 직접 호출하는 방법입니다. #1. 사용할 함수 정의 자식 컴포넌트에서 호출할 함수를 methods에 정의합니다. // 자식 컴포넌트 export default { methods: { childFunction() { // 실행할 코드 작성 } } } #2. ref 속성 추가 상위 컴포넌트에서 하위 컴포넌트에 ref속성을 사용하여 하위 컴포넌트에 대한 참조를 추가합니다.. // 부모 컴포넌트 #3. 함수 호출 부모 컴포넌트의 메서드에서 ref 및 함수 이름을 사용하여 자식 컴포넌트의 함수를 호출할 수 있습니다 // 부모 컴포넌트 export default { methods: { parentFunction() { this.$refs.child..

Dev/Vue 2023.01.23

Vue - 사용자 지정 이벤트(Custom Event)

Vue에서는 사용자 지정 이벤트를 사용하여 서로 다른 컴포넌트 간에 통신할 수 있습니다. 템플릿에서 사용자 지정 이벤트를 내보내려면 $emit메서드를 사용하여 이벤트 이름과 이벤트에 포함할 페이로드를 전달할 수 있습니다. 아래는 $emit 메서드를 이용하여 자식 컴포넌트가 부모 컴포넌트에게 데이터를 전달하거나 데이터를 변경하도록 요청하는 방법들입니다. # 템플릿에서 이벤트를 요청 $emit 메서드를 사용하여 이벤트 이름과 이벤트에 포함할 페이로드를 전달할 수 있습니다. // 자식 컴포넌트의 템플릿에서 사용자 지정 이벤트를 요청 Click me # 스크립트에서 이벤트를 요청 this.$emit 메서드를 사용하여 컴포넌트의 스크립트 태그에서 사용자 지정 이벤트를 내보낼 수도 있습니다 . // 자식 컴포넌트의..

Dev/Vue 2023.01.19

Vue3 - 떨어진 컴포넌트간에 데이터와 이벤트 주고받는 방법 mitt

mitt는 컴포넌트끼리 부모자식간의 관계가 아닌 멀리 떨어져 있어는 컴포넌트 간에도 데이터를 전송할 수 있도록 도와주는 라이브러리입니다. Vue2 시절엔 Event Bus라는것을 사용했었는데, Vue3에서는 mitt 또는 tiny-emitter를 사용합니다. 단 이렇게 컴포넌트끼리 서로 데이터를 주고받다보면 프로젝트가 커지면 커질수록 유지 관리에서 문제가 생기게 되므로, 공식적으로도 권장하는 방식은 아닙니다. 이러한 데이터 관리는 Pinia(구. Vuex)를 이용하는것이 좋지만, 상황에 따라서 필요할수도 있으니 필요에 따라 사용하시면 될거 같습니다. #1. 설치 npm install --save mitt #2. 등록 mitt 를 사용하기위해선 main.js 파일을 아래와 같이 수정해주면 됩니다. impo..

Dev/Vue 2022.12.01

Vue - Vuex, Pinia 새로고침해도 상태 유지하기

Vuex나 Pinia 같은 상태 관리 라이브러리를 사용하면서 store의 데이터를 사용하고 있는 페이지에서 새로고침을 하게 되면, 데이터가 사라지게 되는데, 이러한 문제점을 쉽게 해결하여 상태를 유지할 수 있게 해주는 플러그인의 사용법을 간단히 적어봅니다. vuex를 사용하고 있다면 vuex-persistedstate를, Pinia를 사용하고 있다면 pinia-plugin-persistedstate을 예로 작성하였으니 필요한 부분을 참고하시면 됩니다. Vuex를 사용하고 있다면... 이곳을 vuex-persistedstate의 사용법을 설명하기 전에... vuex-persistedstate는 제작자가 더 이상 일상 업무 중에 vue를 사용하지 않게 되어, 공식적으로 더 이상 업데이트를 하지 않을 것이라고..

Dev/Vue 2022.10.13

Vue - Pinia (Vue 상태관리 라이브러리)

Pinia? Pinia는 Vuex와 같은 상태 관리 라이브러리입니다. 얼마전 vuex 기본 사용법에 대한 글을 작성하였는데, 현재 Vue3를 지원하고 있는 Vuex는 버전 4입니다. 또한 Vue의 개발자인 Even You가 자신의 트위터에서 Pinia는 사실상 Vuex 5입니다! 라고 말하기도 했을 정도로 Pinia는 충분히 좋아졌고 안정적입니다. 달라진점은? (1) module을 store로 재구성 프로젝트가 커질수록 Vuex는 store를 모듈화 해서 여러개로 나누게 되는데, 이게 계속 중첩이 되고 타입스크립트나 다른 플러그인을 함께 사용하게 될수록 매우 귀찮아지는데, Pinia는 defineStore라는 함수를 이용하여 각각의 파일마다 별도의 store를 정의하여 module의 기능을 대신하고 있어..

Dev/Vue 2022.10.10

Vue - Composition API 사용방법

1. Composition API를 사용하는 이유 프로젝트가 커지다 보면 어떠한 것을 수정하기 위해서 해당 항목을 찾을 때, 수십 가지의 Data 중에서 하나를 찾고, 이 Data가 어떤 methods에 영향을 받는지 또 수십 개의 methods 중에서 하나를 찾고, Computed에 포함이 되어 있지는 않는지 등 Ctrl + F 기능을 통해 여기저기 하나씩 검색하며 찾아야 하는 불편함이 생기게 되는데, 이럴 때 사용하기 좋은 것이 Composition API입니다. (기존의 사용 방법은 Options API라고 부릅니다) ※ 그냥 하나의 문법(사용방법)이라 보면 됩니다 2. Options API와 Composition API의 비교 아래는 동일한 내용을 기존 방식(Options API)으로 작성했을때와..

Dev/Vue 2022.10.06 (1)

Vue - vuex 사용하는 방법

1. vuex를 사용하는 이유 프로젝트가 커질수록 다양한 컴포넌트에서 서로 연관있는 데이터를 주고받게 되는데, vue는 부모에게서 자식에게로 props로만 데이터를 전송하게 된다. 이러한 방식은 컴포넌트끼리의 관계가 복잡해질수록 데이터를 공유하기 매우 힘들어진다. vuex는 중앙 집중식 저장소 역할을 하며, 여러 컴포넌트에서 쓸 데이터를 보관하고, 언제든 데이터를 바로 가져다 쓸 수 있게 도와준다. 마냥 좋아보이는데 그럼 왜 처음부터 vuex를 쓰지 props를 쓰는것인가? vuex를 사용하게되면 데이터에 대한 접근은 쉬워지지만 우선 코드가 길고 복잡해진다. 그렇기에 개인 프로젝트정도의 작업이나 특정 컴포넌트에서만 사용되는 정도는 vuex없이 사용하는편이 더 간편해진다. 하지만 실제로 작업을 하게되면 v..

Dev/Vue 2022.10.03

Vue - unsplash API를 활용한 이미지 검색 앱 만들어보기

이제 어느 정도 Vue의 기본에 대한 글은 대부분 작성했기에 종합편스럽게 뭐라도 하나 만들어 볼까 생각하고 있었습니다. (그럼에도 글로 적기 너무 길지 않은 걸로...) 예전에 이미지 검색 앱 만드는게 잠깐 유행했었는데, 다들 React로 만드는 글이었기에 그걸 Vue로 한번 만들어 봤습니다. 최종 구현 화면 샘플 이번 글에선 대충 아래와 같은것을 만들어 볼 것입니다. 1. unsplash 개발자 등록 Unsplash Developers 사이트로 이동하여 개발자 등록(회원가입)을 진행합니다. 회원 가입 완료 후 상단의 Your apps로 이동하여 New Application을 클릭하여 새로운 프로젝트를 등록합니다. Application 등록을 완료한 후 볼 수 있는 중앙에 위치한 Keys는 나중에 사용하..

Dev/Vue 2022.09.29

Vue - 라이프사이클 훅(Lifecycle hooks)

1. Lifecycle 리액트 관련 글에선 생명주기 함수라고 많이 하던데 Vue에서는 생명주기라고 부르는 경우를 잘 못본거 같다. 어쨌건 이 라이프 사이클이 뭐냐면 인스턴스가 생성되고 소멸되기까지의 과정이 어쩌구 저쩌구 하는데, 그냥 컴포넌트가 화면에 나타나고 사라질때까지의 과정을 여러 단계로 세분화 해놓은거라고 생각하면 됩니다. 아래는 vue 공식 문서에서 볼수 있는 라이프사이클 다이어그램입니다. 2. 무엇때문에 알아야 하는가? 컴포넌트가 화면에 나타날때는 내부적으로 코드를 읽어 내용물을 생성한 후(create) 화면에 출력(mount)해 줍니다. 또한 데이터 값이 변한다던가(update) 다른페이지로 이동하게되어 컴포넌트가 삭제(unmount)될 수도 있습니다. 이러한 각각의 타이밍에 라이프 사이클 ..

Dev/Vue 2022.09.26
반응형