본문 바로가기

Web/Vue.js

Vuex

- 기존: 부모 자식 관계의 컴포넌트가 많아진다면 데이터의 전달 부분이 복잡해짐: prop, emit 많아짐

- 애플리케이션이 여러 컴포넌트로 구성되고, 더 커지는 경우 데이터를 공유하는 문제 발생

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

 

Vuex가 무엇인가요? | Vuex

Vuex가 무엇인가요? Vuex는 Vue.js 애플리케이션에 대한 상태 관리 패턴 + 라이브러리 입니다. 애플리케이션의 모든 컴포넌트에 대한 중앙 집중식 저장소 역할을 하며 예측 가능한 방식으로 상태를

vuex.vuejs.org

- Vue.js 애플리케이션에 대한 상태관리패턴+라이브러리

- 애플리케이션의 모든 컴포넌트들에 대한 중앙 집중식 저장소 역할 (데이터 관리)


new Vue({
  // 상태
  data () {
    return {
      count: 0
    }
  },
  // 뷰
  template: `
    <div>{{ count }}</div>
  `,
  // 액션
  methods: {
    increment () {
      this.count++
    }
  }
})

상태: 앱을 작동하는 원본 소스 (Vue의 Data)

뷰: 상태의 선언적 매핑 (DOM)

액션: 뷰에서 사용자 입력에 대해 반응적으로 상태를 바꾸는 방법 (Vue의 Method - Actions: 동기, Mutations: 비동기)

Actions(비동기)가 끝나는 시점에 Mutations(동기)를 호출 → state(data)가 갖고 있는 데이터를 변경


설치

npm install vuex --save
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)	// Vuex 명시적으로 추가

Store(저장소)

- 애플리케이션 상태를 보유하고 있는 컨테이너

 

· 일반 전역 객체와 다른 점

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

- 저장소의 상태 직접 변경 불가능: 저장소의 상태를 변경하는 유일한 방법은 명시적인 커밋을 이용한 변이

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++
    }
  }
})

store.commit('increment')

console.log(store.state.count) // -> 1

store.state.count를 직접 변경하는 대신 변이 수행 → 명시적으로 추적 → 코드를 읽을 때 상태 변화를 더 잘 지켜볼 수 있음

상태 단일 상태 트리 사용 → 애플리케이션 수준의 상태를 포함하여 원본 소스의 역할을 함
→ 각 애플리케이션마다 하나의 저장소만 가짐
Getters 저장소의 계산된 속성 (Vue의 computed와 비슷)
getter의 결과는 종속성에 따라 캐쉬되고, 일부 종속성이 변경된 경우에만 다시 재계산 됨
변이(mutations) 실제로 상태를 변경하는 유일한 방법
액션 상태를 변이시키는 대신 액션으로 변이에 대한 커밋 (비동기)
액션도 state를 변경할 수 있긴 함. (하진 않음)
모듈  



'Web > Vue.js' 카테고리의 다른 글

google places api  (0) 2021.05.25
Vue google map api  (0) 2021.05.24
npmjs.com  (0) 2021.05.19
component 간 통신 | 동적 props, Custom Events  (0) 2021.05.18
vue-router  (0) 2021.05.13