16. Vuex

vuex 를 이용하여 글로벌하게 state 를 관리하는 방법을 학습합니다.

Vuex 란 ?

글로벌하게 state 를 관리할 수 있도록 도와주는 상태관리 라이브러리입니다.

왜 vuex 가 필요한가요 ?

1. 형제끼리의 state 교환이 불가능합니다

일반적인 vue state 의 흐름으로는 형제끼리의 데이터 교환이 불가능합니다. 그렇기 때문에 이런 상황에는 두 컴포넌트를 감싸고 있는 부모 컴포넌트로 state 를 올려서 사용하게됩니다.

2. props 의 깊이가 깊어질 경우

1번에서 살펴본것처럼 state 를 부모로 올렸더라도 해당 데이터를 원하는 컴포넌트의 깊이가 깊어질수록 props 를 내려주는것이 힘들고 복잡해집니다.

3. 액션에 따라 동시에 바뀌는 컴포넌트들

버튼이 클릭되었을때 여러 컴포넌트들에 동시에 영향을 주는 경우가 있다면 vuex 도입을 고려해봄직합니다.

실습

(예제는 이전의arrow-up-right 초기 구성되었던 환경에서 시작합니다.)

vuex 의 흐름은 아래와 같습니다. 크게 state, getters, mutations, actions 로 나뉩니다.

  • state: 관리할 상태 값들

  • getters: 밖으로 내보낼 값들 (실제 컴포넌트에서 가져가 사용할 값들)

  • mutations: 실제 state 가 변화되는곳

  • actions: mutations 을 일으키는곳 (state 변화 x)

컴포넌트에서 state 를 가져오기 위해서는 getters 를 이용하고 state 에 변화를 주기 위해서는 actions 를 이용합니다.

먼저 vuex 를 설치합니다

Store 정의

vue 는 아직 vuex 의 존재를 모르기 때문에 vue 객체가 생성될때 해당 store 의 존재를 알려줘야합니다.

컴포넌트 구성

왼쪽 컴포넌트를 -, + 버튼을 노출하고 오른쪽 컴포넌트에는 현재 값을 표현하도록하고 싶습니다. 왼쪽 컴포넌트에서는 버튼을 누를때마다 actions 을 일으켜 해당 mutation 을 일으킵니다. 오른쪽 컴포넌트에서는 getter 를 이용하여 counter 값을 노출합니다.

먼저 Left 컴포넌트를 준비합니다. vuex 의 action 에 접근하기 위해서는 vuex 에서 제공해주는 mapActions 라는 함수를 이용합니다.

다음은 Right 컴포넌트를 준비합니다. getter 에 접근하기 위해서는 vuex 에서 제공해주는 mapGetters 를 이용합니다.

마지막으로 App.vue 에서 컴포넌트들을 불러옵니다.

Last updated

Was this helpful?