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

1 분 소요

Vuex 상태관리 라이브러리

컴포넌트가 많아졌을때 관리할 수 있는 방법이 무엇일까 ? -> 복잡한 컴포넌트들의 관리 문제점을 해결하기 위함

Vuex 용어

4가지로 용어 쉽게 정리 가능 state => data (property) getters => computed mutations => method actions => 비동기 method

하나의 스토어보다는 여러가지 스토어를 관리해야하고, 스토어를 구조화하는 방법과 모듈 구조화하는 방법을 알 필요가 있다. 그래야 앱이 커지면 커질수록 잘 관리할 수 있기 때문이다.

Vuex란?

  • 무수히 많은 컴포넌트의 데이터를 관리하기 위한 상태 관리 패턴이자 라이브러리
  • React의 Flux 패턴에서 기인함
  • Vue.js 중고급 개발자로 성장하기 위한 필수 관문

Flux란?

  • MVC 패턴의 복잡한 데이터 흐름 문제를 해결하는 개발 패턴 - Unidirectional data flow Action -> Dispatcher -> Model -> View Flux란
  1. action : 화면에서 발생하는 이벤트 또는 사용자의 입력
  2. dispatcher : 데이터를 변경하는 방법, 메서드
  3. model : 화면에 표시할 데이터
  4. view : 사용자에게 비춰지는 화면

MVC 패턴과 Flux 패턴 비교

  1. MVC 패턴
  2. Flux 패턴

MVC 패턴의 문제점

  • 기능 추가 및 변경에 따라 생기는 문제점을 예측할 수가 없음. 예) 페이스북 채팅 화면
  • 앱이 복잡해지면서 생기는 업데이트 루프 MVC패턴의문제점

Flux패턴의 단방향 데이터 흐름

  • 데이터 흐름이 여러 갈래로 나뉘지 않고 단방향으로만 처리 Flux패턴의 단방향 데이터흐름

Vuex가 왜 필요할까?

  • 복잡한 애플리케이션에서 컴포넌트의 개수가 많아지면 컴포넌트간에 데이터 전달이 어려워진다. Vuex가 왜 필요할까

이벤트 버스로 해결?

  • 어디서 이벤트를 보냈는지 혹은 어디서 이벤트를 받았는지 알기 어려움
  • 컴포넌트간 데이터 전달이 명시적이지 않음 이벤트버스로 해결

Vuex로 해결할 수 있는 문제

  1. MVC 패턴에서 발생하는 구조적 오류
  2. 컴포넌트간 데이터 전달 명시
  3. 여러개의 컴포넌트에서 같은 데이터를 업데이트 할때 동기화 문제

Vuex 컨셉

  • State : 컴포넌트간에 공유하는 데이터 -> data()
  • View : 데이터를 표시하는 화면 -> template
  • Action : 사용자의 입력에 따라 데이터를 변경하는 methods 또는 이벤트로직을 발생시키는 methods -> methods

단순하게도식화한그림 단방향 데이터 흐름 처리를 단순하게 도식화한 그림

Vuex 구조

Vue Componetns(컴포넌트) -> Actions(비동기 로직 처리) -> Mutations(동기 로직 처리) -> State(상태=데이터) -> Vue Componetns(컴포넌트) 순으로 돌아간다. Vuex구조

Actions은 비동기로직만 처리를 하고 데이터(state)를 바꾸지는 못한다. Mutations은 데이터(State)를 바꿀 수 있으며, 동기 처리를 한다.

왜 Actions가 있고 왜 Mutations이 있는지 알 필요가 있다.

Vue.use(Vuex)의 사용

Vue.use(Vuex);

use는 vue의 플러그인이라는 기능 Vue를 쓸 때 전역에 특정 기능을 사용하고 싶을 때 사용한다.

Vuex 기술요소

  • state : 여러 컴포넌트에 공유되는 데이터 -> data
  • getters : 연산된 state값을 접근하는 속성 -> computed
  • mutations : state값을 변경하는 이벤트 로직 또는 메서드 -> methods
  • actions : 비동기 처리 로직을 선언하는 메서드 -> async methods
//Vue
data: {
    message: 'Hello Vue.js!'
}

//Vuex
state: {
    message: 'Hello Vue.js!'
}

<!-- Vue -->
<p><p>

<!-- Vuex -->
<p></p>

카테고리:

업데이트:

댓글남기기