Frontend-Vuejs

Vuex가 무엇일까

jiwoolee 2021. 7. 30. 16:32

참고 사이트:

더보기
더보기

참고 사이트:

1. Vuex 시작하기

https://vuex.vuejs.org/kr/guide/ https://joshua1988.github.io/web-development/vuejs/vuex-start/ (캡틴판교)

2. Vuex가 무엇인가요

https://vuex.vuejs.org/kr/


3. Vuex 개념부터 실무에서의 사용

https://kdydesign.github.io/2019/05/09/vuex-tutorial/


4. Vuex tutorial - 맨땅에 개발하기

https://youtu.be/gf_KAs7otf4


5. Inflearn - Vue.js 완벽 가이드 - 실습과 리팩토링으로 배우는 실전 개념


6. Vuex api get start
https://velog.io/@cateto/Vue.js-Vuex-api-1-Get-Started

 

Vuex로 api를 호출할거다

 = Vuex를 이용해 vuex state에 api를 담아 화면에 표시하겠다는 의미

 

Vuex:

  • Vue.js 애플리케이션에 대한 상태 관리 패턴 + 라이브러리
  • 애플리케이션의 모든 컴포넌트에 대한 중앙 집중식 저장소 역할
  • 예측 가능한 방식으로 상태를 변경할 수 있음

그러니까,

Vuex는 말 그대로 중앙 집중식 저장소

⇒ props와 event에 얽매이지 않아도 됨

⇒ 컴포넌트의 구조가 복잡한 경우에는 props와 event를 통한 데이터 전달보다는 Vuex를 통해 별도의 저장소에서 데이터를 관리하는 것이 올바름

 

Vuex 저장소가 일반 전역 개체의 다른 점 두가지:

더보기
더보기

Vuex 저장소가 일반 전역 개체와 두 가지 다른 점.
https://vuex.vuejs.org/kr/guide/

1. Vuex store는 반응형
Vue 컴포넌트는 상태를 검색할 때 저장소의 상태가 변경되면 효율적으로 대응하고 업데이트

2. 저장소의 상태를 직접 변경할 수 없음
저장소의 상태를 변경하는 유일한 방법은 명시적인 커밋을 이용한 변이. 모든 상태에 대한 추적이 가능한 기록이 남을 수 있으며 툴을 사용하여 앱을 더 잘 이해할 수 있음

 

그런데, 

상태 관리 패턴이 뭘까?

new Vue({
  // state: 컴포넌트 간에 공유할 data
  data () {
    return {
      count: 0
    }
  },
  // view: 데이터가 표현될 template
  template: `
    <div>{{ count }}</div>
  `,
  // actions: 사용자의 입력에 따라 반응할 methods
  methods: {
    increment () {
      this.count++
    }
  }
})

단방향 데이터 흐름이라면

state-view-actions-state-view-... 

 

state-view-action 구조를 더 알아보자

더보기
더보기

state

원본 소스의 역할

view와 직접적으로 연결되어 있는 model

state는 직접적으로 변경 불가

⇒ 대신 mutation을 통해 변경 가능

⇒ mutation을 통해 state가 변경되면 view update

mutations

state를 변경하는 유일한 방법

이벤트와 유사

mutation은 함수로 구현되며 첫 번째 인자는 state, 두 번째 인자는 payload

mutation은 일반적으로는 직접 호출을 할 수 없으며, commit을 통해서만 호출 가능

actions

mutation과 비슷하지만 mutation과는 달리 비동기 작업이 가능

mutation에 대한 commit이 가능하여 action에서도 mutation을 통해 state를 변경 가능

action에서는 첫 번째 인자를 context 인자로, 두 번째 인자를 payload로 받을 수 있다.

( context에는 state, commit, dispatch, rootstate와 같은 속성들을 포함)

commit을 통해 mutation을 호출

⇒ Action은 dispatch를 통해서 호출

context의 속성을 보면 dispatch가 있는 것으로 보아 action에서는 서로 다른 action을 호출할 수 있음을 알 수 있음

getters

Vue 컴포넌트에서 Computed

=계산된 속성인데 getter의 결과는 종속성에 따라 캐시 되고 일부 종속성이 변경된 경우에만 다시 재계산

⇒ 특정 state에 대해 어떠한 연산을 하고 그 결과를 View에 바인딩할 수 있으며,

⇒ state의 변경 여부에 따라 getter는 재계산이 되고 View 역시 업데이트를 일으킨다.

⇒ state는 원본 데이터로서 변경이 일어나지 않는다.

 

하지만,

다중의 컴포넌트가 공통 state를 공유함으로써 간단함이 무너질 때도 있음.

⇒ 공통 state를 추출해서 공유하자

⇒ 전역적으로 singleTon으로 관리하자

=⇒ 하나의 크으은 뷰로 만들자

=⇒ vuex의 기본 아이디어

 

vuex 응용프로그램의 중심은 store.

내 어플리케이션의 state를 붙잡고 있는 컨테이너임.

 

Vuex가 무엇인지 알았으니 이제 시작해보자